VBA別館・Python別館
VBA for~nextで終了 - Tak
2018/07/24 (Tue) 19:02:16
前回作成した住所録を使って、文字検索するVBAを作りましょう。
① 姓と名前を一つのセルに入れましょう
折角別々のセルに入れたのに! 練習練習。
・sheet上なら、G1に=A1& " " & B1と書けばお終いです。 " "の間は半角スペースです。 全角では姓と名前の間が空きすぎて格好悪いので半角スペースにしました。
では次回にそれをVBAで書きましょう。
Re: 住所の検索VBA - Tak
2018/07/25 (Wed) 08:47:11
② まずsheet上でテスト
・セルG1に=A1&" "&B1と数式を書きます
・その数式を下に連続コピーする
・自動的にA1はA2に、B1はB2に変わっていますね
" "は半角スペースですよ。
ボタンを作る準備 - Tak
2018/07/25 (Wed) 16:01:01
③ コマンドボタンをシートに張り付ける準備
・図のように、Activeコントロールから四角いボタンをクリックする
続く
Re: 住所の検索VBA - Tak
2018/07/25 (Wed) 16:29:08
⑤ コードを書きます
・コマンドボタンをクリック(図の赤枠)
・Sheet1に張り付けてありますので、CommandButton1もSheet1に関連付けされています
・ここにまず一行だけtestとして、次のVBAのcodeを書きます。
Private Sub CommandButton1_Click()
Range("G1").Value = Range("A1").Value & " " & Range("B1").Value
End Sub
さて、どうなるでしょうか?
姓+スペース+名 - Tak
2018/07/26 (Thu) 19:44:27
⑥ 最初のデータの処理
CommandButton1をクリックすると、当然図のようになります。
次回で全員の名前を同じように、姓+スペース+名と処理します。 そのcodeを考えて下さい。
Re: 住所の検索VBA - Tak
2018/07/27 (Fri) 17:08:06
⑦ 全員の名前を揃えましょう
次のようなcodeを書けば、全員(この場合は7名)の名前が揃います。
----------------
Private Sub CommandButton1_Click()
Range("G1").Value = Range("A1").Value & " " & Range("B1").Value
Range("G2").Value = Range("A2").Value & " " & Range("B2").Value
Range("G3").Value = Range("A3").Value & " " & Range("B3").Value
Range("G4").Value = Range("A4").Value & " " & Range("B4").Value
Range("G5").Value = Range("A5").Value & " " & Range("B5").Value
Range("G6").Value = Range("A6").Value & " " & Range("B6").Value
Range("G7").Value = Range("A7").Value & " " & Range("B7").Value
End Sub
-----------------------
図のように、姓と名の間に半角スペースが入った綺麗な名前が出来ます。
Re: 住所の検索VBA - Tak
2018/07/27 (Fri) 20:30:16
⑧ こんなcodingでいいのでしょうか
幼稚っぽいcodeですね。 でも考え方はこれで良いのです。 何といっても、見ただけで何をやっているかがよく分かります。
まずこんなcodeで動作するか試してみて、うまく行くならもう少しスマートなcodeに改良しましょう。
上のcodeをよく見ると、セルのアドレスが一行、一欄ずつ増えていますね。 簡単明瞭にするには、rangeの代わりにcellsを使い、for~nextで回します。
次回をお楽しみに。 ではまた。
Re: 住所の検索VBA - Tak
2018/07/28 (Sat) 08:46:35
⑨ range()をcells()で表す
何故セルの場所を表示するのに、cells()を使うかというとfor~nextを使うのに適しているからです。
以前書きましたが、例えばセルG5をrangeとcellsで書きますと;
・range("G5")
・cells(5,7):行は5番目、列は7番目
となります。 この5,7という数字の所にiとかjとか言う変数を割り当てると、codeが非常に簡単になります。
前のrangeを使ったcodeをcellsを使うと、こうなります。
Cells(1, 7).Value = Cells(1, 1).Value & " " & Cells(1, 2).Value
Cells(2, 7).Value = Cells(2, 1).Value & " " & Cells(2, 2).Value
Cells(3, 7).Value = Cells(3, 1).Value & " " & Cells(3, 2).Value
Cells(4, 7).Value = Cells(4, 1).Value & " " & Cells(4, 2).Value
Cells(5, 7).Value = Cells(5, 1).Value & " " & Cells(5, 2).Value
Cells(6, 7).Value = Cells(6, 1).Value & " " & Cells(6, 2).Value
Cells(7, 7).Value = Cells(7, 1).Value & " " & Cells(7, 2).Value
これをCommandButton1のcodeとして書きますと、以前のrangeのものと同じ処理をしてくれます(図は省略)。
cellsの意味が分かったところで、次回はfor~nextで簡潔codeに書き換えます。
Re: 住所の検索VBA - Tak
2018/07/29 (Sun) 09:31:39
⑩ cells一行で済ます
最終的に下記のcodeで完了です。
Dim i As Integer '行番号
For i = 1 To 7
Cells(i, 7).Value = Cells(i, 1).Value & " " & Cells(i, 2).Value
Next
End Sub
-----------------------
少し説明します。
・最初のサイクルでi=1から始まります
・すると
Cells(i, 7).Value = Cells(i, 1).Value & " " & Cells(i, 2).Value
は Cells(1, 7).Value = Cells(1, 1).Value & " " & Cells(2, 2).Value
となります。ここで一行目の氏名が連結されます。
・次はnextという指示でi=2となります
Cells(i, 7).Valueは、Cells(2, 7).Valueとなり、次のi、すなわち3と変わってcells(3,7)となります
・iが7になったらfor-nextから抜け出て、このプロシージャーは終了します
・行番号用の変数iの宣言を忘れないでくださいね。 勝手に変数を使うと、最初のOption Explicitと言う見張り番がエラーと大声を出します。
どうです、cells(i,j)の便利さが把握できたでしょうか? 今回は不要でしたが、列もを変更するなら、jを使います。
その辺はそのうち書きます。
以上でこの項終わります。