- ベストアンサー
VBA教えてください!
VBA教えてください! A1に値が入っていたらA1の値はそのまま、 B1に値が入っていればA2にB1の値を入れる、 C1に値が入っていればA3にC1の値を入れる、 : : P12に値が入っていればA12にC12の値を入れる、 A13に値が入っていたらA13の値はそのまま、 B13に値が入っていればA14にB13の値を入れる、 C13に値が入っていればA15にC13の値を入れる、 : : P13に値が入っていればA24にP13の値を入れる、 を繰り返し行ないたいのですが どのようにしたらいいですか?? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まず、 >P12に値が入っていればA12にC12の値を入れる、 >P13に値が入っていればA24にP13の値を入れる、 この2行を除けば:の部分がどこまでかわからないが、データがある場合行列を入れ替えたコピーと言う規則性はある。 また、 >P12に値が入っていればA12にC12の値を入れる、 が >P12に値が入っていればA12にP12の値を入れる、 なら、P12、P13・・・が他とは例外的だが規則性がある。 と言うつもりではなければ、以下は読み飛ばしてください。 例えば A1に値が入っていたらA1の値はそのまま、(入っていなければの条件が無いのでA1は何もしない) B1に値が入っていればA2にB1の値を入れる、 C1に値が入っていればA3にC1の値を入れる、 : : K1に値が入っていればA11にK1の値を入れる、 P12に値が入っていればA12にP12の値を入れる、(他のデータとは例外的) A13に値が入っていたらA13の値はそのまま、(入っていなければの条件が無いのでA13は何もしない) B13に値が入っていればA14にB13の値を入れる、 C13に値が入っていればA15にC13の値を入れる、 : : K13に値が入っていればA23にK13の値を入れる、 P13に値が入っていればA24にP13の値を入れる、(他のデータとは例外的) と言う条件なら 'A1は何もする必要がない Range("B1:K1").Copy Range("A2").PasteSpecial SkipBlanks:=True, Transpose:=True If Range("P12") <> "" Then Range("A12") = Range("P12") 'A13は何もする必要がない Range("B13:K13").Copy Range("A14").PasteSpecial SkipBlanks:=True, Transpose:=True If Range("P13") <> "" Then Range("A24") = Range("P13") で実行できる。 その繰返しなら、繰り返しの条件(または繰り返し終了の条件)がわからないので10回ほど繰り返す場合。 方法は色々あるので一例です。 Sub sample() Dim baseCell As Range'Range("A1"),Range("A13")...と変わるセル Dim pCell As Range '例外的なP12からのセル Set baseCell = Range("A1") '初期値 Set pCell = Range("P12") '初期値 Dim i As Integer For i = 1 To 10 '繰り返しの条件(または終了の条件)で変わるが10回繰り返す baseCell.Offset(0, 1).Resize(1, 10).Copy 'baseCell=Range("A1")ならRange("B1:K1").Copyと同じ意味 baseCell.Offset(1, 0).PasteSpecial SkipBlanks:=True, Transpose:=True 'baseCell=Range("A1")ならRange("A2").PasteSpecial...と同じ意味 If pCell <> "" Then baseCell.Offset(11, 0) = pCell Set baseCell = baseCell.Offset(12, 0) 'baseCell=Range("A1")ならbaseCell=Range("A13")になる Set pCell = pCell.Offset(1, 0) 'pcell=Range("P12")ならpcell=Range("P13")になる Next End Sub 尚、PasteSpecialで値のみをコピーする場合などはPaste:=xlValueとかの指定が必要。 また、 Set baseCell = baseCell.Offset(12, 0) Set pCell = pCell.Offset(1, 0) でsetを忘れると別の意味(そのセルの値を変える)になるので注意
その他の回答 (1)
- kokorone
- ベストアンサー率38% (417/1093)
この回答を書くにあたり、 ・規則性をみつける ・繰り返すためには、ループ変数を使い、規則性に基づいて 繰り返し処理を行う ということを行います。 分からないから、教えてでは、「丸投げ」になってしまいますよ。 繰り返しは、 Cells(rounum.colnum).value rounum,colnumは繰り返し変数 を使えば、可能ですね。
お礼
とても助かりました。ありがとうございました。 お礼が遅くなってすみません。。