
VBA教えてください!
A1に値が入っていたらA1の値はそのまま、
B1に値が入っていればA2にB1の値を入れる、
C1に値が入っていればA3にC1の値を入れる、
:
:
P12に値が入っていればA12にC12の値を入れる、
A13に値が入っていたらA13の値はそのまま、
B13に値が入っていればA14にB13の値を入れる、
C13に値が入っていればA15にC13の値を入れる、
:
:
P13に値が入っていればA24にP13の値を入れる、
を繰り返し行ないたいのですが
どのようにしたらいいですか??
よろしくお願いします。
No.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を忘れると別の意味(そのセルの値を変える)になるので注意
No.1
- 回答日時:
この回答を書くにあたり、
・規則性をみつける
・繰り返すためには、ループ変数を使い、規則性に基づいて
繰り返し処理を行う
ということを行います。
分からないから、教えてでは、「丸投げ」になってしまいますよ。
繰り返しは、
Cells(rounum.colnum).value rounum,colnumは繰り返し変数
を使えば、可能ですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル関数教えてください 3 2022/06/21 10:22
- Excel(エクセル) Excel セルの数値を参照させるにはどうすれば良いですか? 4 2022/08/28 16:50
- Excel(エクセル) エクセルで、 A1セルに「A」という値、 B1セルに「B」という値が入っています。 どちらも表示形式 5 2023/02/22 23:05
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) エクセルの関数式を教えてください。 2 2022/11/29 21:09
- Excel(エクセル) エクセルで一定の数値を超えたとき”一定数”、超えなかったら計算式を入れたい 3 2022/04/05 10:31
- Excel(エクセル) 条件付き書式の設定方法を教えて下さい。 2 2023/04/14 18:12
- Excel(エクセル) Excelについて A1からA12まで、1月〜12月と入力し、 B1からB12の範囲に、C1とD1に 4 2022/05/26 22:48
- Excel(エクセル) エクセルで期間に入っているかどうかの判定 4 2022/10/04 22:17
- Excel(エクセル) スプレッドシートについて A1÷B1の値をC1に、A2÷B2をC2、A3÷B3をC3…といった感じで 1 2022/05/17 20:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA Forの使い方について...
-
[return]の役割について
-
ExcelVBA マクロの高速化について
-
バッチファイルがうまくいきま...
-
Excel-vba 文字列と変数を...
-
バブルソートとクイックソート
-
VB6.0-整数と余りを求める
-
プログラミングについて教えて...
-
動的配列の初期化
-
ExcelVBA select case 値設定
-
フォームを開くときに、コンボ...
-
円板の2点間の距離算出方法
-
inputstreamとハンドルの開放
-
エクセルVBAでのチェックボック...
-
C言語 exitの使い方
-
C言語で困っています
-
VBA教えてください!
-
論理演算をつかったインクリメ...
-
VBAでダブルコーテーション入り...
-
C言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 exitの使い方
-
Excel-vba 文字列と変数を...
-
フォームを開くときに、コンボ...
-
数字の位ごとの値を表示するプ...
-
VB6.0-整数と余りを求める
-
足して100になるような乱数のア...
-
ラジオボタンの値の取得につい...
-
C#で動的にコントロールを取得...
-
VBAで配列のNULL判定
-
データ構造のmapとは?
-
関数で複数の値を戻り値として...
-
世界のナベアツ
-
VBA コンボボックスの値をスピ...
-
VBAの定数の使い方で、計算値を...
-
スピンボタンで小数点
-
1つ前の値を変数に保存する方法
-
Nullってどういう意味ですか?
-
コンボボックスの名前を変数に...
-
DWORDって
-
vbaで極大値を抽出する方法
おすすめ情報