アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA勉強中です。
For~Nextについて、いまいちわからないので、教えてほしいのですが、
下記の表を作り、テーブルと言う名前を付けました。
C列に上からA.Bの値を入れようと思います。

| A | B |C
1| AA| 11|
2| AB| 12|

Sub Macro1()
Dim AA As Range, BB As Range, AB As Variant
Dim myTbl As Range, myFld As Integer, i As Integer

Set AA = Range("A1") 'AAの箱にA1の値を
Set BB = Range("B1") 'BBの箱にB1の値を

Set myTbl = Range("テーブル") 'myTblの箱にテーブルを
myFld = 3 'myFldの箱に3列目
AB = AA & "." & BB 'A1とB1の値を入れる

For i = 1 To myTbl.Rows.Count 'iはテーブルの1行目から最後の行まで
If myTbl.Cells(i, myFld).Value = AB Then 'テーブルの1行目のCのセルにA1とB1の値を入れる
Exit Sub
End If
Next
End Sub

と思うのですが、やはり動きません。
アドバイスをお願いします。

A 回答 (4件)

Set AA = Range("A1") 'AAの箱にA1の値を


 でなく ここではAAの箱にA1の箱を指定しただけです。
AAの箱(変数)にA1の値を  なら
Dim AA As Variant
AA = Range("A1").Value


For Next で テーブルの処理行に応じて
'iはテーブルの1行目から最後の行まで 対象を変化させて
実行すべきところ 処理すべき AAの箱 BBの箱が
For Next の外にあり 固定で Setでオブジェクト指定する効果なく固定になっています。

If Then End If Exit Sub はここでは使わない。
条件判定と 出力実行処理 が混乱しているかも・・
 
・・とりあえずそのまま直す

Sub Macro1()
Dim AAの箱 As Range, BBの箱 As Range
Dim AB As Variant
Dim myTbl As Range, 出力列 As Integer
Dim テーブル処理行 As Integer

Set myTblの箱 = Range("テーブル") 'myTblの箱にテーブルを
出力列 = 3 '出力列にmyFldの箱の3列目

For テーブルの処理行 = 1 To myTblの箱.Rows.Count
Set AAの箱 = Range("A" & テーブルの処理行)
Set BBの箱 = Range("B" & テーブルの処理行)
AB = AAの箱.Value & "." & BBの箱.Value 'A1とB1の値を入れる

myTblの箱.Cells(テーブルの処理行, 出力列).Value = AB 'テーブルのテーブルの処理行目のCのセルにA1.B1の値を入れる

Next
End Sub

'整理すると "テーブル"と言う範囲の中での処理を意図しているようなので
'Set AA = Range("A1") で進めても テーブルの移動に追従しない(上のはテーブル=Range("A1:C3")固定)ので
'#2に沿って

Sub テーブルのAAとBB⇒CC()
出力列 = 3
Set 処理範囲 = Range("テーブル")
With 処理範囲
For テーブルの処理行 = 1 To .Rows.Count
A列の値 = .Cells(テーブルの処理行, 1).Value
B列の値 = .Cells(テーブルの処理行, 2).Value
出力の値 = A列の値 & "." & B列の値
.Cells(テーブルの処理行, 出力列).Value = 出力の値
Next
End With
End Sub
    • good
    • 0
この回答へのお礼

丁寧に解説を書いていただき、有難うございました。
For~Nextの意味はわかるのですが、処理の記述の仕方がわからなかったんです。解りやすくて、勉強になりました。

お礼日時:2005/04/18 00:11

#1です。



> これは If文です。
> 条件が合わないので Exit Sub に入り、そのまま何もしないで終了です。

すみません、勘違いでした。
何も起きない理由は「条件が合わない場合の記述がない」ためです。
If を使うなら

 If myTbl.Cells(i, myFld).Value = AB Then
   Exit Sub
 Else
   myTbl.Cells(i, myFld).Value = AB
 End If

のように Else で条件が一致しない場合の処理をいれるか、

 If myTbl.Cells(i, myFld).Value <> AB Then
  myTbl.Cells(i, myFld).Value = AB
 End If

のように条件が一致しない場合に処理するようにするかです。
    • good
    • 0

たぶん、こういうことでは?


なお、テーブルと設定されたのでしたら、そのまま使えばよいと思います。

Sub TestMacro2()
Dim i As Long
Const myFld As Integer = 3
With Range("テーブル")
For i = 1 To .Rows.Count
  .Cells(i, myFld).Value = .Cells(i, 1).Value & "." & .Cells(i, 2).Value
Next i
End With
    • good
    • 0

この行の意味は解って書いてますか?



 If myTbl.Cells(i, myFld).Value = AB Then
   Exit Sub
 End If

これは If文です。
条件が合わないので Exit Sub に入り、そのまま何もしないで終了です。

代入したいなら上記3行を下記に置き換える

myTbl.Cells(i, myFld).Value = AB

但し、この指定は全部に同じ値を入れるようになってます。
それで良いの?

本当は

myTbl.Cells(i, myFld).Value = Range("A" & i) & "." & Range("B" & i)

のようにしたいのでは?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!