
とびとびのデータをどう扱うかをみてください。
とびとびの間隔に法則をみつけることが大事。法則をみつけたら、1、4、7、12のようにとびとびのデータを、Range("列名" & 変数×3−2).Valueと表現できるというのがポイント。すぐに法則がみつけられなくても実際にかいているうちにわかることがあるのでまずは動くマクロを1個ずつかいてみることが大事です。
この講座を含む定額コースに参加するか、この講座を購入することで、講座を利用できるようになります。
定額コースに参加すると、そのコースの利用期間中はいつでも講座を利用できます。
講座を購入すると、いつでも講座を利用できます。
学習記録としてメモを残す
質問や感想を投稿する
投稿時に 記号が \ に変換されてしまいますが、気にせず投稿してください。※投稿に必要な権限がありません。
このページへの投稿/コメント
この章に関しての質問です。
このように連続したセルを転記する際に、Next構文使いたいのですが、どのように書けばいいでしょうか?
Sub ren()
Dim gyo
For gyo = 1 To 4
Range("A1:D1").Value = Range("G1:J1").Value
Next
End Sub
> マクロは何度もトライしましたが挫折、ここの講座でマスターできて良かったです。
成果につながっているようであればなによりです。
ご質問の件、以下の2のやり方が考えられます。
[1] 1セルずつ転記する
[2] 「A1:D1」のような複数セルを指定しているところで、それぞれ個別に行番号の指定を変数化する
まずは、1から。
これは、すぐに理解できるかと思います。
Sub ren1()
Dim gyo
For gyo = 1 To 4
Range("A" & gyo).Value = Range("G" & gyo).Value
Range("B" & gyo).Value = Range("H" & gyo).Value
Range("C" & gyo).Value = Range("I" & gyo).Value
Range("D" & gyo).Value = Range("J" & gyo).Value
Next
End Sub
[2] について。
結論から書くと、以下のとおり。
Sub ren2()
Dim gyo
For gyo = 1 To 4
Range("A" & gyo & ":D" & gyo).Value = Range("G" & gyo & ":J" & gyo).Value '(*)
Next
End Sub
(*) のような変数化、サラサラできますでしょうか。
慣れないうちは、いっきにやろうとすると失敗します。
最初のうちは、以下のように、段階を経て着実に変形させていってください。
"A1D1"
↓
"A" & "1D1"
↓
"A" & "1" & "D1"
↓
"A" & gyo & "D1"
↓
"A" & gyo & "D" & "1"
↓
"A" & gyo & "D" & gyo
行全体が赤くなったら、「構文エラー」ということです。
そのときは、さらに自力で変形してなおそうとせず、 [Ctrl] + [Z] で元に戻していって、壊れていない状態まで戻してからやりなおすこと。
なお、この変形を上手にできるようになるためのコツは、マウスを使わず、カーソルキーの操作だけでやることです。
カーソルキーでのカーソル移動だけで成し遂げることを意識して練習すると、やがて、 "A1D1" を "A" & gyo & "D" & gyo に変形するくらいなら途中の過程いっさい抜きでいきなりできるようになります。
(以下は、今後、この投稿を見られる方向けのメッセージという意味をこめて)
もし「こんなの、自分には、スラスラとはできないな...」ということでしたら、文字列と変数の扱いにまだ慣れていないということですので、基礎編第2章の演習をやりなおしてみてください。
調べてみたところ
motogyo = kai * 3 - 2 ’★
で
kai=1
なのに
motogyo=-2
になっています。
これは何故なのでしょうか?
--------------------------------------------
Sub kaitou1()
Dim kai
Dim motogyo
Dim listgyo
motogyo = kai * 3 - 2 ’★
listgyo = 1
For kai = 1 To 10
Range("C" & listgyo).Value = Range("A" & motogyo).Value & Range("A" & motogyo).Value
listgyo = listgyo + 1
Next
End Sub
こんにちは。
いただいたサンプルだと、★の行が実行される段階では、 kai は、どんな値も設定されていません。
Dim kai '← kai という変数を作っただけ(値はまだ入っていない)
Dim motogyo '← motogyo という変数を作っただけ(値はまだ入っていない
Dim listgyo '← listgyo という変数を作っただけ(値はまだ入っていない
motogyo = kai * 3 - 2 ' kai には値が入っていないので、 0 とみなされる。 0 * 3 - 2 で、右辺の計算結果は「-2」となる。
早速のご回答、ありがとうございます。
motogyo = kai * 3 - 2
をFor…行の下(Kaiの値が入った後)にしたら、正しく処理できました。
良かったです。
こういうときは、上から順に慎重に検討するとよいです。
慣れないうちはよくある間違いです。
> 小川先生
> 早速のご回答、ありがとうございます。
> motogyo = kai * 3 - 2
> をFor…行の下(Kaiの値が入った後)にしたら、正しく処理できました。
Range("C1").Value = Range("A1" ).Value & Range("A2" ).Value ですが、これをまとめてRange("C1").Value = Range("A1" & "A2").Value 左記のように書いたのですが、実行時エラー1004と出ました。これは何故動かないのでしょうか。宜しくお願いいたします。
> これをまとめてRange("C1").Value = Range("A1" & "A2").Value 左記のように書いたのですが
"A1" & "A2" → "A1A2" ですね。
そもそも、以下の[1]でもエラーになります。ので、[2]でも当然エラーになります。
Sub Sample1()
Range("C1").Value = Range("A1A2").Value '[1] ×
Range("C2").Value = Range("A1" & "A2").Value '[2] ×
End Sub
書くなら、まだしも、以下の[3]です。
エクセルのSum関数等でも、隣接した複数セルを表現するときはこんな感じですね。
ただし、実行すると分かりますが、[3] では、 [4] と同じ結果は得られません。
Sub Sample2()
Range("C3").Value = Range("A1:A2").Value '[3] △
Range("C4").Value = Range("A1").Value & Range("A2").Value '[4] ○
End Sub
> これをまとめて
ということでしたが、そもそも、"A1:A2" と範囲指定をまとめて、「これは、A1とA2にある値を結合してくれという意味だ」とこびとちゃんに解釈してもらおうというのは、ムリな話に僕には感じられます。
複数セルから値を拾ってきたなら、結合以外にも、足し算するかもしれない。かけ算するかもしれない。と、いろいろな可能性があります。その中で、こびとちゃんが「ここは、結合してほしいのだろう」と思ってもらえるとしたら、どうしてでしょうか。また、誤解が生じる可能性は?とか、いろいろ考えられます。
そこまで考えると、「前記[1]のような書き方のときには、NGとする」としたほうが、プログラミング言語の仕様としては親切かな、とも思います。
以上、どうでしょうか。
> お世話になります。この正月にだいぶ進捗できました。1つ確認させてください。
> Range("C1").Value = Range("A1" ).Value & Range("A2" ).Value ですが、これをまとめてRange("C1").Value = Range("A1" & "A2").Value 左記のように書いたのですが、実行時エラー1004と出ました。これは何故動かないのでしょうか。宜しくお願いいたします。
そこで質問です。
今回は見本回答がE列にあること、転記データが「第●回」で始まるので、不足分があることにすぐ気が付きますが、実務でデータ総数が多い、小川先生はどうしますか?
まずマクロの実行確認として最終行まで転記されているかを確認し、最終行と違ったら⇒for bangou =1 to ●の「●」の範囲が足りないことを推測し、例えば適当に10足したりしますか?
> [1]の回答を聞いてからは[2]は途中まで解けましたが、案の定184回までしか転記できず、特集記事は見逃しました。
>
> そこで質問です。
> 今回は見本回答がE列にあること、転記データが「第●回」で始まるので、不足分があることにすぐ気が付きますが、実務でデータ総数が多い、小川先生はどうしますか?
ショートカットキーを使ってエクセル画面をどんどんスクロールしていき、画面を「凝視する」のではなく、「俯瞰」していきます。
すると、形がおかしいところがあると、すぐに気づきます。
なんで、やはり以下はおすすめ。
○イヤでもWindowsとエクセルの操作が早くなるワークショップ
https://www.exvba.com/winxls.php
> まずマクロの実行確認として最終行まで転記されているかを確認し、最終行と違ったら⇒for bangou =1 to ●の「●」の範囲が足りないことを推測し、例えば適当に10足したりしますか?
元データの整形具合によっては、上記の「俯瞰」にくわえて、さらに、Matsumotoさんのおっしゃるようなやり方も含めて、いろいろ調査していきます。
あとは、中間データをどこかのタイミングでしっかり作るかも。
そのあたりの考え方については、以下の講座で学んでください。
○エクセル仕事を劇的に楽にする「DPRフレームワーク」
https://www.exvba.com/dpr.php
私が考えたのは、
変数*3+1で、その代わりに変数の範囲を
0 to 9 にするというものでした。
同じ結果が得られたので、悪くはないと思いますが、項目の数が10個でしたから、
やはり1 to 10 にして得られる法則にするべきだなと感じました。可読性という点で、
後で時間が経ってからプログラムを読んだときに、なぜ 0-9なのか?をいったん考えないといけなくなるからです。
先生の[1]の回答を見てからは、[2]はすぐできました。
今レベルの私が楽しいと感じる部分は、
この規則性をいかに見つけるかの作業ですね。
マクロは規則的な処理が得意なので、こびとちゃんには得意なことをさせてあげればいいわけです。
gooska
プログラミングとは、デッサンのようなものです。
何度も書いているうちに、自然に最適化された選択をできるようになってきます。
ひきつづきお楽しみください☆
Sub mondai6_1()
Dim moto1
Dim moto2
Dim saki
moto1 = 1
moto2 = 2
For saki = 1 To 10
Range("c" & saki).Value = Range("a" & moto1).Value & Range("a" & moto2).Value
moto1 = moto1 + 3
moto2 = moto2 + 3
Next
End Sub
結果は同じですが、変数が多いとメンテナンスもしにくいので、
確かに数列で記述する方がスマートだと思いました。
学生の頃は数学不得意だったので、今回改めて勉強になりました。
「数列」という言い方をしましたが、要は規則性ですね。
ひきつづきよろしくお願いいたします。
・データの規則性をみつけたら変数×3−2のように数式で表せるように考え
てみる。←この思考が大切!
慣れてしまえばなんでもない、よくあるパターンです☆
> ・二つのデータを合わせるときは”&”でつける。
> ・データの規則性をみつけたら変数×3−2のように数式で表せるように考え
> てみる。←この思考が大切!
[2]は○*4-2は出来たのですが、そのあとが思いつかず…
模範解答を見たら「あら~…」でした。
規則性が捉えられなかったので悔しいです。
とりあえず、今日の朝11時頃から始めて、15時頃までかけて、
問1~7まで一通り模範解答通りのマクロが書けました。
繰り返しているとハナコのステップが体に落ちてくる感じがします。
何回も何回も繰り返して淀みなく作業出来るまで持っていきます。
途中経過でした。
> とりあえず、今日の朝11時頃から始めて、15時頃までかけて、
> 問1~7まで一通り模範解答通りのマクロが書けました。
問1~7までの問題を自力で解けるようでしたら、発展編1にいつでも進んでいただいてOKです。
お世話になります。
マクロの質問ではないのですが、動画10分ころにif文を使って確認する場面がありますが、if文をコピーした後Ctrl+↓ だと、最終行まで選択されてしまうと思うのですが、190行までしかコピペされていません。いったいどうやったのですか。それとも最終行までコピペされたのをなにかショートカットで消しているのですか。細かい質問ですみません。
右に1セル分移動してから [Ctrl] + [ ↓ ] , その後、左に1セル分移動します。
> 小川様
> お世話になります。
> マクロの質問ではないのですが、動画10分ころにif文を使って確認する場面がありますが、if文をコピーした後Ctrl+↓ だと、最終行まで選択されてしまうと思うのですが、190行までしかコピペされていません。いったいどうやったのですか。それとも最終行までコピペされたのをなにかショートカットで消しているのですか。細かい質問ですみません。
フォローアップでは、まず自分でマクロを作ってみてから答えや動画を見ています。
今回、自分で書いたマクロでは数列は使ってなかった(2015年2月5日の匿名さんと、そっくりのマクロでした)のですが、
動画では数列を使っていました。この式で数値がこう変わる、って結果はわかるのですが、自分でこの式を導き出す術がわかりません。
中学レベルの数列すら全く理解していないので、別サイトで数列の勉強からし直そうとしてみたのですが、
等差数列とかますます理解できなくなり絶望的になっています。
こんなことでは便利なマクロが作れるようにはなれそうにもない、と意気消沈。
やっぱり数列を理解できないと、先々発展できないでしょうか?
「数列」て言うと難しく聞こえますが、要は、「規則性」のことです。
「規則性」のことを難しい言葉で言うと「数列」になります。
2, 5, 8, 11, 14, 17, ... ていう数字の連続は、「規則性」がありますね。
この規則性を数式で完結に表現すると 3n-1 てなる、てだけのことです。
↑
上記の解説を読んでから、もう一度動画を見直してみてください。
そのうえで、またコメントください。そのときに、いただいた以下の投稿での質問あわせてお答えしたいと思います。
>はじめまして。2017年12月からこちらでマクロを勉強し始めました。
>フォローアップでは、まず自分でマクロを作ってみてから答えや動画を見ています。
>今回、自分で書いたマクロでは数列は使ってなかった(2015年2月5日の匿名さんと、そっくりのマクロでした)のですが、
>動画では数列を使っていました。この式で数値がこう変わる、って結果はわかるのですが、自分でこの式を導き出す術がわかりません。
>中学レベルの数列すら全く理解していないので、別サイトで数列の勉強からし直そうとしてみたのですが、
>等差数列とかますます理解できなくなり絶望的になっています。
>こんなことでは便利なマクロが作れるようにはなれそうにもない、と意気消沈。
>やっぱり数列を理解できないと、先々発展できないでしょうか?
>
ご返信ありがとうございます。解説を読んで動画を見直してみました。
数式3n-1から、変数×公差ー2、や変数×公差ー1になったいきさつは結局理解できませんでしたが
考えても理屈が理解できなかったので、行がとびとびの場合は、変数×公差ー〇が使えると丸覚えしておくことにします。
あとは動く式を何行か書いて、規則性を見つけて適当に数字を入れて、実際動かして見つける方法でいきます。
>新見陽子 さん:
>
>「数列」て言うと難しく聞こえますが、要は、「規則性」のことです。
>「規則性」のことを難しい言葉で言うと「数列」になります。
>
>2, 5, 8, 11, 14, 17, ... ていう数字の連続は、「規則性」がありますね。
>
>この規則性を数式で完結に表現すると 3n-1 てなる、てだけのことです。
>
>↑
>
>上記の解説を読んでから、もう一度動画を見直してみてください。
>そのうえで、またコメントください。そのときに、いただいた以下の投稿での質問あわせてお答えしたいと思います。
>>はじめまして。2017年12月からこちらでマクロを勉強し始めました。
>>フォローアップでは、まず自分でマクロを作ってみてから答えや動画を見ています。
>>今回、自分で書いたマクロでは数列は使ってなかった(2015年2月5日の匿名さんと、そっくりのマクロでした)のですが、
>>動画では数列を使っていました。この式で数値がこう変わる、って結果はわかるのですが、自分でこの式を導き出す術がわかりません。
>>中学レベルの数列すら全く理解していないので、別サイトで数列の勉強からし直そうとしてみたのですが、
>>等差数列とかますます理解できなくなり絶望的になっています。
>>こんなことでは便利なマクロが作れるようにはなれそうにもない、と意気消沈。
>>やっぱり数列を理解できないと、先々発展できないでしょうか?
>>
>
3, 6, 9, 12, 15, ... だったら、 3 * n ですね。
2, 5, 8, 11, 14, ... だったら、 3 * n - 1 です。ただそれだけ。
↑上記の説明だとどうでしょう?
>あとは動く式を何行か書いて、規則性を見つけて適当に数字を入れて、実際動かして見つける方法でいきます。
実際、そういうもんです。
かく言う僕も、結局、「とりあえず書いてみて、まずは動作確認」てしつつプログラミングしていますし。
その意気があれば大丈夫かと。
慣れちゃえば、ただのパターンなんで。
>小川慶一 さん:
>ご返信ありがとうございます。解説を読んで動画を見直してみました。
>数式3n-1から、変数×公差ー2、や変数×公差ー1になったいきさつは結局理解できませんでしたが
>考えても理屈が理解できなかったので、行がとびとびの場合は、変数×公差ー〇が使えると丸覚えしておくことにします。
>あとは動く式を何行か書いて、規則性を見つけて適当に数字を入れて、実際動かして見つける方法でいきます。
わかりました!
これで↓理解できました!
>>3, 6, 9, 12, 15, ... だったら、 3 * n ですね。
その結果から辻褄を合わすために↓ -1やー2をするんですね。
>>2, 5, 8, 11, 14, ... だったら、 3 * n - 1 です。ただそれだけ。
等差数列 an=(初項)+(公差)・(n-1) の式に当てはめて考え
訳が分からなくなっていました。スッキリです!
明日になると、またぶり返して混乱してそうですが・・・
今はスッキリです!ありがとうございます。
>新見陽子 さん:
>
>3, 6, 9, 12, 15, ... だったら、 3 * n ですね。
>2, 5, 8, 11, 14, ... だったら、 3 * n - 1 です。ただそれだけ。
>
>↑上記の説明だとどうでしょう?
>
>>あとは動く式を何行か書いて、規則性を見つけて適当に数字を入れて、実際動かして見つける方法でいきます。
>
>実際、そういうもんです。
>かく言う僕も、結局、「とりあえず書いてみて、まずは動作確認」てしつつプログラミングしていますし。
>
>その意気があれば大丈夫かと。
>慣れちゃえば、ただのパターンなんで。
>
>
>
>>小川慶一 さん:
>>ご返信ありがとうございます。解説を読んで動画を見直してみました。
>>数式3n-1から、変数×公差ー2、や変数×公差ー1になったいきさつは結局理解できませんでしたが
>>考えても理屈が理解できなかったので、行がとびとびの場合は、変数×公差ー〇が使えると丸覚えしておくことにします。
>>あとは動く式を何行か書いて、規則性を見つけて適当に数字を入れて、実際動かして見つける方法でいきます。
>
それは良かった!
>等差数列 an=(初項)+(公差)・(n-1) の式に当てはめて考え
>訳が分からなくなっていました。スッキリです!
難しく考え過ぎですw
苦手意識があったり、高度な課題に取り組んでいるという意識にとらわれていたりすると、難しく考えすぎてしまいますね。
事実は、ほとんどのことは、簡単なことの積み重ねです。
少なくとも、エクセルマクロくらいならそんなものです。
>自分でこの式を導き出す術がわかりません。
当初の質問の核はこれ↑でした。
この件については、いちおう解決、ということでよいでしょうか。
でしたらあとは練習です。
理解の度合いが深まったら、より身体にその理解を馴染ませるためにもう一度問題を解くこと、
数学苦手だった方には耳が痛いかもしれませんが、数学と同じで、ここでそのひと手間をかけるかどうかで、一生もののスキルになるかどうかが決まります。
ともあれ、これからも、ひっかかることがあったら、コメント欄にお気軽に投稿してください。
そして、今回のように対話が必要な場合もあります。一発で解決しないことを恐れないこと。
今回の経験を糧に自信に、ひきつづきお楽しみください☆
はい!これは↓一応、解決です。
>>自分でこの式を導き出す術がわかりません。
わかったつもりの問題も、テニスの素振り練習のように
何度も繰り返して身体に染み込ませます。
ありがとうございます。
>新見陽子 さん:
>
>それは良かった!
>
>>等差数列 an=(初項)+(公差)・(n-1) の式に当てはめて考え
>>訳が分からなくなっていました。スッキリです!
>
>難しく考え過ぎですw
>
>苦手意識があったり、高度な課題に取り組んでいるという意識にとらわれていたりすると、難しく考えすぎてしまいますね。
>
>事実は、ほとんどのことは、簡単なことの積み重ねです。
>少なくとも、エクセルマクロくらいならそんなものです。
>
>>自分でこの式を導き出す術がわかりません。
>
>当初の質問の核はこれ↑でした。
>この件については、いちおう解決、ということでよいでしょうか。
>でしたらあとは練習です。
>理解の度合いが深まったら、より身体にその理解を馴染ませるためにもう一度問題を解くこと、
>数学苦手だった方には耳が痛いかもしれませんが、数学と同じで、ここでそのひと手間をかけるかどうかで、一生もののスキルになるかどうかが決まります。
>
>ともあれ、これからも、ひっかかることがあったら、コメント欄にお気軽に投稿してください。
>そして、今回のように対話が必要な場合もあります。一発で解決しないことを恐れないこと。
>
>今回の経験を糧に自信に、ひきつづきお楽しみください☆
動画を見てから、数列を使ったやり方に挑戦しました。
数列を見たときは分からなかったのですが、ちゃんと該当行を書きだして考えれば
データは3行サイクルなので、3の倍数行に対し、それぞれの剰余が0,1,2になることがわかります。
3のn倍のnが、データを書き出すC列の行番号と連動するので、変数も1つでいいわけですね。
それをもとにあてはめれば、動画の方式でうまくいくことも理解できました。
前半が理解できたので、後半は悩まずに解けました。
さて昨晩のコードですが、
データの規則性として必ず「第」が先頭に来るのであれば問題ないと思いますが、
2問目のようにスペシャルが混ざった場合には対応できませんね・・・
空白行があっても今回のように行数に規則性があるならば、数列の考えで取り出す方が良いと
納得しました。
逆に空白が不規則であるならば、IF文を使うほうが良いのかなと。
2問目について。データがいくつあるのか空白行のためにパッと見てわかりにくいとき
forでいくつを指定したらいいのかと考えました。
実は最初、多めの200まで指定して、行を超えても空白行どうしになるから大丈夫かなと思ったんですが、
今回のように間にハイフンをつけなくてはいけない場合、ハイフンだけの行が発生してしまいます。
次にif range(”A”& bango)<>"" then のようなIF文をつけたらどうかと思ったのですが、
これをやるとカウント変数がうまく作動せず、C列の書き出しに空白行が出たり、抜き出さずに飛ばされるデータが出たりして
うまくいきませんでした。(;´・ω・)
いろいろ心配すべきことが見えてきたのはよいことです。
料理と同じです。何度かトライしてみないと見えないこともありますが、慣れてくると、細かい注意点を気にしつつ作業できるようになります。
>何度も同じコメントをUPしてしまいすみません;
>動画を見てから、数列を使ったやり方に挑戦しました。
>数列を見たときは分からなかったのですが、ちゃんと該当行を書きだして考えれば
>データは3行サイクルなので、3の倍数行に対し、それぞれの剰余が0,1,2になることがわかります。
>3のn倍のnが、データを書き出すC列の行番号と連動するので、変数も1つでいいわけですね。
>それをもとにあてはめれば、動画の方式でうまくいくことも理解できました。
>前半が理解できたので、後半は悩まずに解けました。
>
>さて昨晩のコードですが、
>データの規則性として必ず「第」が先頭に来るのであれば問題ないと思いますが、
>2問目のようにスペシャルが混ざった場合には対応できませんね・・・
>空白行があっても今回のように行数に規則性があるならば、数列の考えで取り出す方が良いと
>納得しました。
>逆に空白が不規則であるならば、IF文を使うほうが良いのかなと。
>
>2問目について。データがいくつあるのか空白行のためにパッと見てわかりにくいとき
>forでいくつを指定したらいいのかと考えました。
>実は最初、多めの200まで指定して、行を超えても空白行どうしになるから大丈夫かなと思ったんですが、
>今回のように間にハイフンをつけなくてはいけない場合、ハイフンだけの行が発生してしまいます。
>
>次にif range(”A”& bango)<>"" then のようなIF文をつけたらどうかと思ったのですが、
>これをやるとカウント変数がうまく作動せず、C列の書き出しに空白行が出たり、抜き出さずに飛ばされるデータが出たりして
>うまくいきませんでした。(;´・ω・)
>
なので再アップします。どこかに掲載済でしたらすみません。)
今回数式の話が出たところで動画をとめて、自分だったらどうするか考えて以下を書きました。
文系の発想ですみません。コメントいただけましたら幸いです。
これから数列の勉強をしに動画を見てきます。
Sub mondai006()
Dim moto
Dim syukei
syukei = 1
For moto = 1 To 28
If Left(Range("A" & moto).Value, 1) = "第" Then
Range("C" & syukei).Value = Range("A" & moto).Value & Range("A" & moto + 1).Value
syukei = syukei + 1
End If
Next
End Sub
by gooska見本と比べてどうでしょうか?
>(昨晩以下の書き込みしたつもりでしたが、時間切れで画面が更新されなかったみたいです。
>なので再アップします。どこかに掲載済でしたらすみません。)
>今回数式の話が出たところで動画をとめて、自分だったらどうするか考えて以下を書きました。
>文系の発想ですみません。コメントいただけましたら幸いです。
>これから数列の勉強をしに動画を見てきます。
>
>Sub mondai006()
> Dim moto
> Dim syukei
> syukei = 1
> For moto = 1 To 28
> If Left(Range("A" & moto).Value, 1) = "第" Then
> Range("C" & syukei).Value = Range("A" & moto).Value & Range("A" & moto + 1).Value
> syukei = syukei + 1
> End If
>Next
>End Sub
>
>by gooska見本と比べてどうでしょうか?
>(昨晩以下の書き込みしたつもりでしたが、時間切れで画面が更新されなかったみたいです。
>なので再アップします。どこかに掲載済でしたらすみません。)
>今回数式の話が出たところで動画をとめて、自分だったらどうするか考えて以下を書きました。
>文系の発想ですみません。コメントいただけましたら幸いです。
>これから数列の勉強をしに動画を見てきます。
>
>Sub mondai006()
> Dim moto
> Dim syukei
> syukei = 1
> For moto = 1 To 28
> If Left(Range("A" & moto).Value, 1) = "第" Then
> Range("C" & syukei).Value = Range("A" & moto).Value & Range("A" & moto + 1).Value
> syukei = syukei + 1
> End If
>Next
>End Sub
>
>by gooskaちなみに、裏技的な解法で解いてみましたが、回答と比べるとシンプルではないですね。
Sub moji()
Dim gyo
Dim migi
migi = 1
For gyo = 1 To 29 Step 3
Range("C" & migi).Value = Range("A" & gyo).Value & Range("A" & gyo + 1).Value
migi = migi + 1
Next
End Sub
Stepキーワード、ご存じでしたら使っていただいた大いによいかと。
フォロー動画は教材のコンセプトとして、アルゴリズムの習得のほうをコマンドの知識を増やすことより優先するということにしています。
つまり、アルゴリズムの習得に力を入れていて、多様な道具の習得というところは極力後回しにしています。。というか、なるべく少ない道具で実装するようにしています。
でないと覚えることが増えすぎて、受講生が挫折する可能性が高くなりますので。
経験的にも、動画で示した方法でもできるようになった方に Step キーワードをお伝えする、というくらいが順番としてはちょうど良いかなと。
>法則性の表現と検証の関数が参考になりました。
>ちなみに、裏技的な解法で解いてみましたが、回答と比べるとシンプルではないですね。
>
>Sub moji()
> Dim gyo
> Dim migi
> migi = 1
> For gyo = 1 To 29 Step 3
> Range("C" & migi).Value = Range("A" & gyo).Value & Range("A" & gyo + 1).Value
> migi = migi + 1
> Next
>End Sub
>
>Stepキーワード、ご存じでしたら使っていただいた大いによいかと。
>フォロー動画は教材のコンセプトとして、アルゴリズムの習得のほうをコマンドの知識を増やすことより優先するということにしています。
>
>つまり、アルゴリズムの習得に力を入れていて、多様な道具の習得というところは極力後回しにしています。。というか、なるべく少ない道具で実装するようにしています。
>でないと覚えることが増えすぎて、受講生が挫折する可能性が高くなりますので。
参考になります。少ない道具でできる事が増えると自信にもつながりますし。
手元がしっかりしていれば、基本的な道具があればたいていのことはできるんですよね。
なかなかそれを分かってもらえないので困ります。高度経済成長時代以降の道具信仰ややドラえもんの影響なんでしょうかね。
>小川慶一 さん:
>
>>Stepキーワード、ご存じでしたら使っていただいた大いによいかと。
>>フォロー動画は教材のコンセプトとして、アルゴリズムの習得のほうをコマンドの知識を増やすことより優先するということにしています。
>>
>>つまり、アルゴリズムの習得に力を入れていて、多様な道具の習得というところは極力後回しにしています。。というか、なるべく少ない道具で実装するようにしています。
>>でないと覚えることが増えすぎて、受講生が挫折する可能性が高くなりますので。
>
>参考になります。少ない道具でできる事が増えると自信にもつながりますし。
>
基礎編フォローアップ講座を拝聴していますが、2回から音声が非常に小さくて
聞き取りにくい状態です。
Safariで再生しています。
ボリームを最大にしていますが、他にも音を大きくする方法があったら教えてください。
最初に自分だけでやってみた時は、数列を使わずに解きました。
End Sub
Sub list()
Dim title
Dim gyo
title = 1
For gyo = 1 To 10
Range("C" & gyo).Value = Range("A" & title).Value & Range("A" & title + 1).Value
title = title + 3
Next
End Sub
やはり、文系的な発想ですね…。
数列を使った方が、同じ動きをするプログラムでも、行数が少なく、スッキリしたものができますね。
勉強になりました。
ありがとうございます。
VBAについての細かい知識をいろいろつけるより、発想のほうが大切です。
いろいろ、楽しみながら学んでいただければと☆
>こんにちは。
> 最初に自分だけでやってみた時は、数列を使わずに解きました。
>
>
>End Sub
>Sub list()
>Dim title
>Dim gyo
>title = 1
>
> For gyo = 1 To 10
> Range("C" & gyo).Value = Range("A" & title).Value & Range("A" & title + 1).Value
> title = title + 3
> Next
>
>End Sub
>
>>やはり、文系的な発想ですね…。
> 数列を使った方が、同じ動きをするプログラムでも、行数が少なく、スッキリしたものができますね。
> 勉強になりました。
>ありがとうございます。
私も問題[1]について自力でやってみたところ、こちらの方とほぼ同じコードが出来上がりました。(同じく文系出身者です)
Sub mondai1()
Dim saki
Dim moto
moto = 1
For saki = 1 To 10
Range("c" & saki).Value = Range("a" & moto).Value & Range("a" & moto + 1).Value
moto = moto + 3
Next
End Sub
結果はこれでも十分達成できるのですが、お手本の回答を見てこのような書き方もあるのか、と気が付きました。
forの変数だけだと1つずつしか数値を増やせないと思い込んでいたので、てっきりもう一個「3ずつ増える用の変数」を別に作らなければ!と思っていましたが、range("")の方でfor変数に*3するなどして調整すれば、変数は1つだけでも対応できるのですね。
(転記先は1行ずつ進ませ、転記元は3行ずつ進ませるという処理が)
私は文系選択をしたので数列はよくわかっていませんが、3ずつ増えるというのは確かに、たし算というより掛け算的な発想ですね。勉強になりました。
> こんにちは。
> 最初に自分だけでやってみた時は、数列を使わずに解きました。
>
>
> End Sub
> Sub list()
> Dim title
> Dim gyo
> title = 1
>
> For gyo = 1 To 10
> Range("C" & gyo).Value = Range("A" & title).Value & Range("A" & title + 1).Value
> title = title + 3
> Next
>
> End Sub
>
> > やはり、文系的な発想ですね…。
> 数列を使った方が、同じ動きをするプログラムでも、行数が少なく、スッキリしたものができますね。
> 勉強になりました。
> ありがとうございます。
基礎編ベーシックでは、マクロを書くときの考え方の基本たる考え方を演習を通して学べるように、ということで題材を選んでいます。
地味な問題が多いですが、どれも、演習で示した方針で解けるようにしっかり練習しておくと、あとが違います (^^
本ばっかり読んでやっていた時は、その内容が唯一の答えのように感じてしまいますね。
何事も自分で試していくことが大事ですね。
”いくつかサンプルを試してみる”が団子の中味を決める大切なステップだと感じました☆
ありがとうございました。
>何事も自分で試していくことが大事ですね。
それそれ。「分からない」て言って固まっているのではなく、手を動かしながら考えることです。
講座本編でもお伝えしているとおり、以下がポイントです。
[1] まずは書いてから考える
[2] まずは実行してから考える
>そうか、数列とか高校生でやった内容も応用できますね!!
>本ばっかり読んでやっていた時は、その内容が唯一の答えのように感じてしまいますね。
>何事も自分で試していくことが大事ですね。
>
>”いくつかサンプルを試してみる”が団子の中味を決める大切なステップだと感じました☆
>ありがとうございました。
フォローアップkiso6の問題の動画を見る前に フォローアップkiso4の内容を利用して マクロを以下書いてみました。
結果は同じでしたが、
Range("列名" & 変数×3−2).Value のfor next構文の方がシンプルで
書く時間も半分で済みますね!
勉強になりました。
Sub kiso6no1()
Dim ketugou
Dim gyo
gyo = 1
For ketugou = 1 To 28
If Range("A" & ketugou).Value <> "" And Range("A" & ketugou + 1).Value <> "" Then
Range("C" & gyo).Value = Range("A" & ketugou).Value & Range("A" & ketugou + 1).Value
gyo = gyo + 1
Else
End If
Next
End Sub
自力で書けるようにトライすることはとても大切です。
力になりますよね。
そのあとで解説を見るというのが理想です。
いただいたマクロについてひとつだけ。
条件を満たさないときは何もしない、という場合はelseは不要です。
ひきつづきお楽しみください☆
>小川先生
>
>フォローアップkiso6の問題の動画を見る前に フォローアップkiso4の内容を利用して マクロを以下書いてみました。
>結果は同じでしたが、
>Range("列名" & 変数×3−2).Value のfor next構文の方がシンプルで
>書く時間も半分で済みますね!
>勉強になりました。
>
>Sub kiso6no1()
> Dim ketugou
> Dim gyo
> gyo = 1
> For ketugou = 1 To 28
> If Range("A" & ketugou).Value <> "" And Range("A" & ketugou + 1).Value <> "" Then
> Range("C" & gyo).Value = Range("A" & ketugou).Value & Range("A" & ketugou + 1).Value
> gyo = gyo + 1
> Else
> End If
> Next
>
>End Sub
>
組み合わせて色々できる幅が広がるのは楽しいです。
引き続きよろしくお願いします。
はい。
基礎編でお渡した道具だけでも、かなりのことができますよ!
ひきつづきお楽しみください。どんどん進めてください☆
>for next と数列の組み合わせ面白いですね。
>組み合わせて色々できる幅が広がるのは楽しいです。
>引き続きよろしくお願いします。