
【この動画で使用する教材ファイル】
・Kiso02_01.xls
・kiso_mm_movie.pdf(P10:講義概要)
※講座内で使用する資料は、この個別ページ内でダウンロードできます。
この講座を含む定額コースに参加するか、この講座を購入することで、講座を利用できるようになります。
定額コースに参加すると、そのコースの利用期間中はいつでも講座を利用できます。
講座を購入すると、いつでも講座を利用できます。
学習記録としてメモを残す
質問や感想を投稿する
投稿時に 記号が \ に変換されてしまいますが、気にせず投稿してください。※投稿に必要な権限がありません。
このページへの投稿/コメント
はじめまして。よろしくお願いいたします (^^
> 結合の&の前後には、半角スペースがないとVBAでは動かないという理解で宜しいでしょうか。
> (普通に、エクセルで関数を書く時には、スペースなしでも結合ができるので、多少混乱しています。
こういうのは、実際に試されてみるとよいです。
僕の回答を待たないで学習を進められますし、練習になりますし、自分で実験したことについては理解が深まりますので。
結論から言うと、スペースを入れないとロクなことになりません。
習慣としてスペースを入れるようにしてください。
以下、サンプルを書いてみました。
VBEに貼りつけてみてください。そのときに行全体が赤くなってしまったものはすべてNGです。
Sub and_sample()
'直前の文字列なり数値なりとの間のスペースを削除
Range("A1").Value = "A"& "B"
Range("A2").Value = "A"& 3
Range("A3").Value = 123& "B"
Range("A4").Value = 123& 456
'直後の文字列なり数値なりとの間のスペースを削除
Range("B1").Value = "A" &"B"
Range("B2").Value = "A" &3
Range("B3").Value = 123 &"B"
Range("B4").Value = 123 &456
'直前直後の文字列なり数値なりとの間のスペースを削除
Range("C1").Value = "A"&"B"
Range("C2").Value = "A"&3
Range("C3").Value = 123&"B"
Range("C4").Value = 123&456
End Sub
なお、こんな結果になります↓。
https://www.dropbox.com/s/6hb6gcepvbhtejw/and_sample.JPG?dl=0
変数が登場するとさらにややこしくなるのですが、これでも十分ややこしいので、これ以上の解説は不要かと。
「ではなぜこれはOKで、これはNGなんだ」とか、そういう議論をするには、発展編1以上の知識が必要です。
基礎編学習の段階では、「スペースを入れないとロクなことにならない。習慣としてスペースを入れるようにするのがよい」と鵜呑みにしておいていただくのが良いかと思います。
いつもお世話になっております。
お返事ありがとうございます。(お返事遅くなりすみません。)
たしかに、=の前後にはスペースを忘れても、次の行にいけば勝手に
スペースを入れてくれるのに、&やFor A to Bのtoの前後のスペースはそうではない(=自分でスペースを入れないと赤くなる)のは何故だろう・・
と思っていたのですが、今の段階では、スペースは入れるほうがよいということを習慣にしておきます。
ありがとうございました。
> ゲストさん:
>
> はじめまして。よろしくお願いいたします (^^
>
> > 結合の&の前後には、半角スペースがないとVBAでは動かないという理解で宜しいでしょうか。
> > (普通に、エクセルで関数を書く時には、スペースなしでも結合ができるので、多少混乱しています。
>
> こういうのは、実際に試されてみるとよいです。
> 僕の回答を待たないで学習を進められますし、練習になりますし、自分で実験したことについては理解が深まりますので。
>
> 結論から言うと、スペースを入れないとロクなことになりません。
> 習慣としてスペースを入れるようにしてください。
>
> 以下、サンプルを書いてみました。
> VBEに貼りつけてみてください。そのときに行全体が赤くなってしまったものはすべてNGです。
>
>
Sub and_sample()
> '直前の文字列なり数値なりとの間のスペースを削除
> Range("A1").Value = "A"& "B"
> Range("A2").Value = "A"& 3
> Range("A3").Value = 123& "B"
> Range("A4").Value = 123& 456
>
> '直後の文字列なり数値なりとの間のスペースを削除
> Range("B1").Value = "A" &"B"
> Range("B2").Value = "A" &3
> Range("B3").Value = 123 &"B"
> Range("B4").Value = 123 &456
>
> '直前直後の文字列なり数値なりとの間のスペースを削除
> Range("C1").Value = "A"&"B"
> Range("C2").Value = "A"&3
> Range("C3").Value = 123&"B"
> Range("C4").Value = 123&456
> End Sub
> > なお、こんな結果になります↓。
> https://www.dropbox.com/s/6hb6gcepvbhtejw/and_sample.JPG?dl=0
>
> 変数が登場するとさらにややこしくなるのですが、これでも十分ややこしいので、これ以上の解説は不要かと。
>
> 「ではなぜこれはOKで、これはNGなんだ」とか、そういう議論をするには、発展編1以上の知識が必要です。
> 基礎編学習の段階では、「スペースを入れないとロクなことにならない。習慣としてスペースを入れるようにするのがよい」と鵜呑みにしておいていただくのが良いかと思います。
そうですね。
使うだけなら簡単でも、理解して運用するとなるとそれ以上のものを要求されるものというのはどうしてもあります。
ひきつづき、マクロの学習お楽しみください☆
> 小川先生
>
> いつもお世話になっております。
> お返事ありがとうございます。(お返事遅くなりすみません。)
> たしかに、=の前後にはスペースを忘れても、次の行にいけば勝手に
> スペースを入れてくれるのに、&やFor A to Bのtoの前後のスペースはそうではない(=自分でスペースを入れないと赤くなる)のは何故だろう・・
> と思っていたのですが、今の段階では、スペースは入れるほうがよいということを習慣にしておきます。
> ありがとうございました。
>
>
>
> > ゲストさん:
> >
> > はじめまして。よろしくお願いいたします (^^
> >
> > > 結合の&の前後には、半角スペースがないとVBAでは動かないという理解で宜しいでしょうか。
> > > (普通に、エクセルで関数を書く時には、スペースなしでも結合ができるので、多少混乱しています。
> >
> > こういうのは、実際に試されてみるとよいです。
> > 僕の回答を待たないで学習を進められますし、練習になりますし、自分で実験したことについては理解が深まりますので。
> >
> > 結論から言うと、スペースを入れないとロクなことになりません。
> > 習慣としてスペースを入れるようにしてください。
> >
> > 以下、サンプルを書いてみました。
> > VBEに貼りつけてみてください。そのときに行全体が赤くなってしまったものはすべてNGです。
> >
> >
Sub and_sample()
> > '直前の文字列なり数値なりとの間のスペースを削除
> > Range("A1").Value = "A"& "B"
> > Range("A2").Value = "A"& 3
> > Range("A3").Value = 123& "B"
> > Range("A4").Value = 123& 456
> >
> > '直後の文字列なり数値なりとの間のスペースを削除
> > Range("B1").Value = "A" &"B"
> > Range("B2").Value = "A" &3
> > Range("B3").Value = 123 &"B"
> > Range("B4").Value = 123 &456
> >
> > '直前直後の文字列なり数値なりとの間のスペースを削除
> > Range("C1").Value = "A"&"B"
> > Range("C2").Value = "A"&3
> > Range("C3").Value = 123&"B"
> > Range("C4").Value = 123&456
> > End Sub
> > > > なお、こんな結果になります↓。
> > https://www.dropbox.com/s/6hb6gcepvbhtejw/and_sample.JPG?dl=0
> >
> > 変数が登場するとさらにややこしくなるのですが、これでも十分ややこしいので、これ以上の解説は不要かと。
> >
> > 「ではなぜこれはOKで、これはNGなんだ」とか、そういう議論をするには、発展編1以上の知識が必要です。
> > 基礎編学習の段階では、「スペースを入れないとロクなことにならない。習慣としてスペースを入れるようにするのがよい」と鵜呑みにしておいていただくのが良いかと思います。
でも小人ちゃんの配慮で文字列以外も文字列とみなして結合してくれる。
結合結果(文字列or数字のどちらとみなされるか)は、結局そのセルの書式設定に依存すると理解しました。
[x] 結合演算子は本来文字列を結合するもの。
↑
OKです。
[y] でも小人ちゃんの配慮で文字列以外も文字列とみなして結合してくれる。
↑
OKです。
[z] 結合結果(文字列or数字のどちらとみなされるか)は、結局そのセルの書式設定に依存すると理解しました。
↑
NGです。
以下の[a]と[b]を同一視されているのではないかと。
[a] 結合結果(すなわち、&で結合した直後にできあがったもの)は、文字列です。(まさに、上記[y]でゲストさんがおっしゃったとおりです)
[b] セルに値を投入したとき、そのセルに最終的に入る値は、セルの書式設定に依存する
たとえば、以下の式で変数 x に投入されるのは、 "31" という、長さ2文字の文字列です。
(「31」という数字ではなく、「"31"」という文字列)
[info]Sub hoge()
Dim x
x = 3 & 1 '[a] 変数 x には、文字列の "31" が入る
End Sub[/info]
さて、セルA1-A4のそれぞれが、以下の表示形式(書式)になっているとしましょう。
A1: 標準
A2: 数値
A3: 文字列
A4: 日付
(上記のそれぞれは、エクセルのダイアログ「セルの書式設定」のタブ「表示形式」から設定できます)
そのとき、以下のマクロを実行するとします。
さて、どうなるか。
[info]Sub fuga()
Dim x
x = 3 & 1 '[a] 変数 x には、文字列の "31" が入る
Range("A1").Value = x '[b-1] 数字の 31 が入る(書式が「標準」だから)
Range("A2").Value = x '[b-2] 数字の 31 が入る(書式が「数値」だから)
Range("A3").Value = x '[b-3] 文字列 "31" が入る(書式が「文字列」だから)
Range("A4").Value = x '[b-4] 日付の 1900/1/31 が入る(書式が「日付」だから)
End Sub[/info]
...。
ということです。
...という説明で、どうでしょう?
サンプルプログラム内のコメント[a], [b-1]~[b-4] は、それぞれ、サンプルプログラムを紹介する前の解説[a], [b]と対応しています。
ご確認ください。
というか、できれば、自分で手書きで同じプログラムを書いて、実行されてみると良いでしょう。
関連の解説を以下の2つの動画でしています。
上記[a], [b]に気をつけて見直してみてください。
○基礎講座第2章4 - セルの書式と、値の投入(この動画のひとつ前のものです)
https://forum.pc5bai.com/lesson/page/112
○基礎講座第2章5 - 文字列の結合(この動画です)
https://forum.pc5bai.com/lesson/page/113
まずは、以上のとおりです。
この説明で十分ご理解いただけるか?五分五分かな、と思っています。ので、フィードバックください (^^)/~
> 結合演算子は本来文字列を結合するもの。
> でも小人ちゃんの配慮で文字列以外も文字列とみなして結合してくれる。
>
> 結合結果(文字列or数字のどちらとみなされるか)は、結局そのセルの書式設定に依存すると理解しました。
やりたいことは、「基礎データ」シートのA列とB列を連想配列に重複せずに格納したいというものです。
以下のとおりにすればとりあえずご希望に近いものにはなるかと思います。
dic.Item(KEY) = dic.Item(KEY) + 1 はコメントアウト。
Sheets("出力").Range("B1").Offset(i).Value = VKEYS(i)
は、右辺を以下のとおりに修正。
dic.Item(VKEYS(i))
> ファイルつけるの忘れていました。
> やりたいことは、「基礎データ」シートのA列とB列を連想配列に重複せずに格納したいというものです。
1つめ
名前だから文字列で""でくくっておかなければならないのですね
2つめ
おお、できました!
実は重複しないリストを作るため、別シートにピボットテーブルを作ってリフレッシュしていました(←けっこうおもしろい発想でしょう?)。
ありがとうございました。
> 1つめ
> 名前だから文字列で""でくくっておかなければならないのですね
「参照するクラスの名称を文字列型で指定する」ということです。
> 2つめ
こららも参考になるかと。
○10秒でできる!エクセルデータの「重複の削除」
https://forum.pc5bai.com/lesson/page/1280
> 小川先生
> 1つめ
> 名前だから文字列で""でくくっておかなければならないのですね
>
> 2つめ
> おお、できました!
> 実は重複しないリストを作るため、別シートにピボットテーブルを作ってリフレッシュしていました(←けっこうおもしろい発想でしょう?)。
> ありがとうございました。
お返事ありがとうございました。
実践あるのみですねやってみます(>_<)
はい、まずは、試してみてください。
差異を感じて疑問に思うことがあれば、ご質問ください 。
またの投稿、お待ちしています ^^
> 小川先生
> お返事ありがとうございました。
> 実践あるのみですねやってみます(>_<)
>
エクセルを触りだしてまだ半年。仕事で関数式を組み合わせてデータ作成をしています。こちらの講座で勉強して仕事のスピードを上げたいと思っています。
演算子の特徴はマクロだけのルールではなく、エクセルのセル自体のルールと思ってよろしいでしょうか。仕事でデータ作成をしている中で文字列、&、” ”、が多く出てくるので混同してしまいそうなので質問です。
はじめまして ^^
まずは、試してみてください。差異を感じて疑問に思うことがあれば、ご質問ください ^^
> はじめまして。小川先生。
> エクセルを触りだしてまだ半年。仕事で関数式を組み合わせてデータ作成をしています。こちらの講座で勉強して仕事のスピードを上げたいと思っています。
> 演算子の特徴はマクロだけのルールではなく、エクセルのセル自体のルールと思ってよろしいでしょうか。仕事でデータ作成をしている中で文字列、&、” ”、が多く出てくるので混同してしまいそうなので質問です。
演算子という言葉を覚えた!
基礎編では、算術演算子、結合演算子、代入演算子、比較演算子が登場します。
基礎編ということもあるので講座内ではいちいち称しませんが、今後の何かの参考までに。
> &は左と右を合わせる演算子
> 演算子という言葉を覚えた!