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

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

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

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

Q&A

解決済

1回答

1139閲覧

VBA条件付きコピペ

shoe

総合スコア13

VBA

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

0グッド

0クリップ

投稿2019/04/11 14:05

編集2019/04/12 18:37

前提・実現したいこと

マクロによる貼り付け。

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

コードが分からないので、ご教示願います。
i=1の時E3にペースト、i=2の時F3にペーストと、iが1増えるたびに列が右に1つずれてペースト
されるコードを組んでおりますが、iには日付を入力しますので、最大で31になります。
これがもっと簡易的なコードにならないかというご相談です。

該当のソースコード

Sub macro1()

Dim i As Integer
Dim answer As String
Dim errmsg As String

i = Range("B1")

If Range("B1") = "" Then

On Error GoTo errmsg
errmsg: MsgBox (" 日付を入力して下さい。")

Exit Sub
End If

answer = MsgBox(prompt:=" 日付に間違いはありませんか?", Buttons:=vbOKCancel)

If answer = 1 Then

End If

Application.ScreenUpdating = False
Range("AC3:AC103").Select
Selection.Copy
Sheets("計算用").Select

If i = 1 Then
Range("E3").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

ElseIf i = 2 Then
Range("F3").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

ElseIf i = 3 Then
Range("G3").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

End If

Sheets("入力用").Select
Range("B1").Select
Selection.ClearContents
Range("A3:J200").Select
Selection.ClearContents
Range("B1").Select

End Sub

試したこと

デバックモードで、間違いを修正し加筆しました。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

Y.H.

2019/04/11 23:37

excelには「マクロの記録」という大変便利な機能があるので、この機能を利用してやりたいことを画面操作しVBAをexcelに作成させて見ては?
mattuwan

2019/04/12 00:19

入力用のシートと、計算用のシートのイメージを提示してみては? >AC3からAC104をコピー >計算用の2行目の数字が一致している列に3行目からペーストしたい。 どのセルの値とどのセルの値を比較して一致と判定するか、また、 一致したら、どのように貼り付けていくかが分かりません。 (セルの数が合わないので、結合したセルがあるなら、それもちゃんと説明してください。) その辺の作業の流れをちゃんと言語化するところから、プログラミングは始まります。
guest

回答1

0

ベストアンサー

仕様がいまいち分りませんが、こんな感じと読み取りました。
日本語の箇所はご自分で調べてみてください。

VBA

1 Dim retu As Integer 2 retu = 5 'E列 3 Do 4 If Cells(2, retu) = "" Then 5 MsgBox "列がないよ" 6 Exit Do 7 End If 8 If 入力用のB2と計算用の列(2行目)を比較 Then 9 計算用の列(3行目)を選択 10 行列を入れ替えて貼付け 11 Exit Do 12 End If 13 retu = retu + 1 14 Loop 15

尚、質問する時は画像と例があるとわかりやすくなることが多いので参考ください。

投稿2019/04/12 00:14

torisan

総合スコア678

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

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

shoe

2019/04/16 08:30

調べた結果、ifを使わずにcaseを使い、処理する事としました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問