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

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

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

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

Q&A

解決済

1回答

549閲覧

指定した値を特定のセル範囲に転記

VBA_Beginner_yu

総合スコア2

VBA

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

0グッド

0クリップ

投稿2020/08/30 14:29

前提・実現したいこと

sheet1のA1の値をsheet2のA2以降にA列の値が空欄ではなくなるまで、
B2以降に値貼付けにしたい。
sheet2のB2以降の書式は"yyyy/mm/dd"の形式にして貼り付けたい

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

型が一致しません

試したこと

Sub 書き出し2()

Dim i As Range
Dim j As Range
Dim d As Range

j = Sheets("sheet2").Range("A3", Cells(Rows.Count, 1).End(xlUp))
d = Sheets("sheet1").Range("A1")

If j <> "" Then
For i = Sheets("sheet2").Range("A3") To j
d.Value = Sheets("sheet2").Range("B2", Cells(Rows.Count, 2).End(xlUp)).Value
Next
MsgBox "発行日が設定されていません"

End Sub

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

そもそも一つの値をsheet2のB2以降に転記するというソースを間違えている気がします。
sheet2のA2以降に値が入っていれば、sheet2のB2以降に転記するという形で記述したいと思ってます。
A列に値が入る最終行は、日によって変わるため、B列に入る値もA列の値の行数分だけになります。

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

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

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

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

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

meg_

2020/08/30 14:34

1.> sheet1のA1の値をsheet2のA2以降にA列の値が空欄ではなくなるまで、B2以降に値貼付けにしたい。 意味が分かりません。sheet2のA列に張り付けたいのか?B列に張り付けたいのか? 画像で補足説明いただきたいです。 2.コードは「コードの挿入」で記入してください。
guest

回答1

0

ベストアンサー

足らない部分は勝手に推測して、下記のような仕様だとして回答します。

sheet1 の A1セルに日付が入力されている。

sheet1 の A1、B1 には項目名が入力されていて、
A2以降にデータが入力されている。

sheet1のA1セルの日付を、A列のデータが入っている最終行までB2以降のB列に転記。

質問のコードはほとんどの行が間違っているので、間違いを一つずつ指摘していくときりがないので、
とりあえず間違いを修正した動くコードを提示しておきます。

vba

1Sub 書き出し2() 2 Dim i As Long 3 Dim j As Long 4 Dim d As Date 5 6 j = Sheets("sheet2").Cells(Rows.Count, 1).End(xlUp).Row 'A列最終行 7 8 If IsDate(Sheets("sheet1").Range("A1").Value) Then 9 d = Sheets("sheet1").Range("A1").Value 10 11 For i = 2 To j 12 Sheets("sheet2").Cells(i, 2).Value = d 13 Next 14 Else 15 MsgBox "発行日が設定されていません" 16 End If 17End Sub

ご自身のコードとこのコードを比べて違っている部分をなぜ違っているのか調べてください。
それでも分からない場合は、どこがどのように分からないか質問してください。

別案

同じ値を入力するならループを使わなくてもセル範囲に一気に代入することもできます。

vba

1Sub 書き出し2() 2 Dim j As Long 3 Dim d As Date 4 5 If IsDate(Sheets("sheet1").Range("A1").Value) Then 6 j = Sheets("sheet2").Cells(Rows.Count, 1).End(xlUp).Row 7 d = Sheets("sheet1").Range("A1").Value 8 Sheets("sheet2").Range("B2:B" & j).Value = d 9 Else 10 MsgBox "発行日が設定されていません" 11 End If 12End Sub

投稿2020/08/30 17:36

hatena19

総合スコア34073

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

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

VBA_Beginner_yu

2020/08/31 03:36

解答ありがとうございます!無事やりたいことができました! まずはsheet2のA列が空白であるかどうかという判定を書くものかと思い、if文でくくってました。。 同じ値を連続で入力すると思ったら、ループを使うものかと思ったんですが、 ループを使わないほうが、わかりやすいですね! 別の列を参照して、値を転記するときにRange("B2:B" & j) の「&」の使うというイメージなんですかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問