重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

 VBA教えてください!
A1に値が入っていたらA1の値はそのまま、
B1に値が入っていればA2にB1の値を入れる、
C1に値が入っていればA3にC1の値を入れる、
:
:   
P12に値が入っていればA12にC12の値を入れる、
A13に値が入っていたらA13の値はそのまま、
B13に値が入っていればA14にB13の値を入れる、
C13に値が入っていればA15にC13の値を入れる、
:
:   
P13に値が入っていればA24にP13の値を入れる、
を繰り返し行ないたいのですが
どのようにしたらいいですか??
よろしくお願いします。

    

    

A 回答 (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を忘れると別の意味(そのセルの値を変える)になるので注意
    • good
    • 0
この回答へのお礼

とても助かりました。ありがとうございました。
お礼が遅くなってすみません。。

お礼日時:2008/08/19 11:01

この回答を書くにあたり、


・規則性をみつける
・繰り返すためには、ループ変数を使い、規則性に基づいて
 繰り返し処理を行う
ということを行います。
分からないから、教えてでは、「丸投げ」になってしまいますよ。
繰り返しは、
Cells(rounum.colnum).value rounum,colnumは繰り返し変数
を使えば、可能ですね。
    • good
    • 0

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