質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

824閲覧

VBA sheet1の値とsheet2の値を入れ替えたい

reit

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/12/08 07:10

前提・実現したいこと

VBA入門者です。VBAで画像のsheet1の"C000...=..."という値が入っている行の=より右の値6個をsheet2のX=、Y=、Z=、W=、P=、R=の順(sheet1でいう一番左の値をX=に代入)に単位は残して、数字の部分だけ入れ替えたいと思い、ネットサーフィンをし、なんとか以下のプログラムを作成しました。
プログラムの実行はできたのですが、以下の画像②のように入れ替える量を増やすと実行されません。本番では、もっと大量の値を交換したいです。

どこを変更すればよいか教えてください。宜しくお願いします。
イメージ説明
イメージ説明
イメージ説明

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

VBA

1ソースコード 2```Sub Sample() 3Dim buf1, buf2, tmp2 4Dim i As Long, j As Long, n As Long, m As Long, r As Long 5Dim sh1 As Worksheet, sh2 As Worksheet 6Application.ScreenUpdating = False 7Set sh1 = Sheets("Sheet1") 8Set sh2 = Sheets("Sheet2") 9r = 1 10For i = 6 To sh1.Cells(Rows.Count, "A").End(xlUp).Row 11If sh1.Cells(i, "A") Like "C*" Then 12For j = 1 To 6 13If j > 3 Then 14n = j - 3 15m = 1 16Else 17n = j 18m = 0 19End If 20buf2 = Split(sh2.Cells(r, n).Offset(m), "=") 21tmp2 = Split(Trim(buf2(1)), Chr(32))(0) 22Select Case InStr(sh1.Cells(i, j), "=") 23Case Is <> 0 24buf1 = Split(sh1.Cells(i, j), "=") 25sh1.Cells(i, j) = buf1(0) & "=" & tmp2 26sh2.Cells(r, n).Offset(m).Replace tmp2, buf1(1), LookAt:=xlPart 27Case Else 28buf1 = sh1.Cells(i, j) 29sh1.Cells(i, j) = tmp2 30sh2.Cells(r, n).Offset(m).Replace tmp2, buf1, LookAt:=xlPart 31End Select 32Next j 33End If 34r = r + 3 35Next i 36Application.ScreenUpdating = True 37End Sub 38 39 40### 試したこと 41 42ここに問題に対して試したことを記載してください。 43 44### 補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2020/12/08 07:14

> 以下の画像②のように入れ替える量を増やすと実行されません デバッグでブレークポイント追加してステップ実行でどうなってるか確認しましたか?
Usirow

2020/12/08 08:41

①で動いている以上、②にしたからといって全く実行されないということはないと思います。 違うブックを開いて実行したなどはありませんか?
guest

回答1

0

こちらで動作確認はしていません。
r = r + 3 の位置を変えています。
これで、期待した通りに動作すると思います。

VBA

1Sub Sample() 2 Dim buf1, buf2, tmp2 3 Dim i As Long, j As Long, n As Long, m As Long, r As Long 4 Dim sh1 As Worksheet, sh2 As Worksheet 5 Application.ScreenUpdating = False 6 Set sh1 = Sheets("Sheet1") 7 Set sh2 = Sheets("Sheet2") 8 r = 1 9 For i = 6 To sh1.Cells(Rows.Count, "A").End(xlUp).Row 10 If sh1.Cells(i, "A") Like "C*" Then 11 For j = 1 To 6 12 If j > 3 Then 13 n = j - 3 14 m = 1 15 Else 16 n = j 17 m = 0 18 End If 19 buf2 = Split(sh2.Cells(r, n).Offset(m), "=") 20 tmp2 = Split(Trim(buf2(1)), Chr(32))(0) 21 Select Case InStr(sh1.Cells(i, j), "=") 22 Case Is <> 0 23 buf1 = Split(sh1.Cells(i, j), "=") 24 sh1.Cells(i, j) = buf1(0) & "=" & tmp2 25 sh2.Cells(r, n).Offset(m).Replace tmp2, buf1(1), LookAt:=xlPart 26 Case Else 27 buf1 = sh1.Cells(i, j) 28 sh1.Cells(i, j) = tmp2 29 sh2.Cells(r, n).Offset(m).Replace tmp2, buf1, LookAt:=xlPart 30 End Select 31 Next j 32 r = r + 3 'ここに移動 33 End If 34 Next i 35 Application.ScreenUpdating = True 36End Sub 37

投稿2020/12/08 09:20

tatsu99

総合スコア5493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問