VBA別館・Python別館

64536

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:07:37

④ ボタンがシートに張り付きました

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を使います。 

その辺はそのうち書きます。

以上でこの項終わります。
 

名前
件名
メッセージ
画像
メールアドレス
URL
文字色
編集/削除キー (半角英数字のみで4~8文字)
プレビューする (投稿前に、内容をプレビューして確認できます)

Copyright © 1999- FC2, inc All Rights Reserved.