エクセルVBAを始めたばかりの初心者です。
何処が悪くてエラーになるのか解りません。誰かわかりやすく教えてもらえないでしょうか?
Private Sub CommandButton2_Click()
Dim i As Long
i = 10
If Worksheets(”日報18-23”).Cells(i, 29) <> ”重複” Then
Else
Workbooks("日報DBの移行2").Worksheets("日報18-23").Range(Cells(i, 1), Cells(i, 25)).Copy _
Workbooks("日報DBの移行2").Worksheets("重複データ").Range(Cells(i, 1))
End If
End Sub
No.4ベストアンサー
- 回答日時:
No1です。
>ブックの拡張子を書いてみましたが、変わりませんでした。
複数の間違いが含まれていますので、そのうちの一部だけを修正しても、エラーを全部無くさなければ動作はしません。
(別のところでエラーが発生しますので)
>3.マクロのコードは、「日報DBの移行2」内の「重複データ」に書いてあります。
ブックもシートもマクロを記載しているブック内で完結しているのなら、ブックの指定を省略しても大丈夫です。
デフォルトがそのブックになりますので。
(もちろん、ブックの指定から記述しても問題はありませんけれど・・)
>Workbooks("日報DBの移行2").Worksheets("日報18-23").Range(Cells(i, 1), Cells(i, 25)).Copy _
>Workbooks("日報DBの移行2").Worksheets("重複データ").Range(Cells(i, 1))
の部分を、以下のように修正すれば、動作するものと推測します。
Worksheets("日報18-23").Cells(i, 1).Resize(,25).Copy _
Worksheets("重複データ").Cells(i, 1)
※ 余談ですが、ご提示の内容に限って言うならば、変数 i の値は10で固定のようですので、必ずしも変数化する必要もなさそうですけれど・・
上記のコードで無時動くようになりました。
別のワークシートとのやり取りで複数セルを変数を使って行うとエラーが出る事が解りました。Range、cellsの使い方を詳しく勉強してみます。Resize使いやすそうです。
何日も迷走してましたが、出口に近づきました。
ありがとうございました。
No.3
- 回答日時:
補足ありがとうございました。
>マクロのコードは、「日報DBの移行2」内の「重複データ」に書いてあります。
1.マクロのあるブック内での処理なので、ブック名は不要になります。
2.rangeを指定する場合、range(cells(i,1),cells(i,25))のように書いてはいけません。worksheets("Worksheets("日報18-23").cells(i,1)のようにワークシートで修飾する必要があります。
但し、range("A10:Y10")のように書く場合は、ワークシートの修飾は不要です。
これを踏まえて、以下のようになります。
1案
Private Sub CommandButton2_Click()
Dim i As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Worksheets("日報18-23")
Set ws2 = Worksheets("重複データ")
i = 10
If ws1.Cells(i, 29) <> "重複" Then
Else
ws1.Range(ws1.Cells(i, 1), ws1.Cells(i, 25)).Copy _
ws2.Range(ws2.Cells(i, 1), ws2.Cells(i, 25))
End If
End Sub
2案
Private Sub CommandButton2_Click2()
Dim i As Long
i = 10
If Worksheets("日報18-23").Cells(i, 29) <> "重複" Then
Else
Worksheets("日報18-23").Range("A" & i & ":Y" & i).Copy _
Worksheets("重複データ").Range("A" & i & ":Y" & i)
End If
End Sub
どちらでも、望んだ結果が得られます。
好きな方を採用してください。
コピーする範囲の列(今回はA~Y)が、予め決まっているなら2案の方が簡単です。2案はrange(○○)の○○が"A1:Y10"になるように文字列を作り上げています。
コピーする範囲の列が可変の場合は、1案のほうが簡単です。
1案。2案のどちらでも無事に動きました。セル範囲の指定にもいろいろあるのですね。そのときどきに合わせて、エラーが出ないように使い分けられ
る様に覚えておきたいです。まだまだ勉強・・・です。
ありがとうございました。
No.2
- 回答日時:
補足要求です。
いろいろと不明な点があるので、確認です。
1.「日報DBの移行2」のブックですが、拡張子は何でしょうか。
.xlsx、 .xls、 .xlsm 等が考えられますが、どれでしょうか。
拡張子まで含めて指定しないとエラーになります。
2.下記の
If Worksheets(”日報18-23”).Cells(i, 29) <> ”重複” Then
の”日報18-23”のシートは、「日報DBの移行2」のブック内のシートですか。
それとも他のブック内のシートでしょうか。
3.マクロは、「日報DBの移行2」内にあるのですか。
それとも、他のブック内にあるのでしょうか。
No.1
- 回答日時:
こんばんは
エラーの際には、エラーの発生個所とエラーの内容が表示されると思いますが、それらは両方とも解決への大きな手掛かりになります。
また、エラー発生時にVBE上で、変数などにカーソルを置くと、その値が表示される機能や、イミディエイトウインドウやウォッチ式なども活用なさると自力解決への近道になると思います。
ご提示のコードの場合、以下の2点が気になります。
・ブック名を名称のみにしていますが、拡張子付きの名称が必要と思われます。
あるいは、マクロの記述してあるブックでの処理であるなら、ThisWorkbookとするか、
ブックオブジェクトの記述を省略することも可能です。
・COPY先のRange指定が
>Workbooks("日報DBの移行2").Worksheets("日報18-23").Range(Cells(i, 1), Cells(i, 25))
>Workbooks("日報DBの移行2").Worksheets("重複データ").Range(Cells(i, 1))
となっていますが、ブック名に関しては上述の通り。
Rangeで指定する場合は
Range("A10") のような方法か
Cells(10, 1) のように指定します。(数値部分は変数でも可です)
ご提示の
>Range(Cells(i, 1))
の場合は、二つのミスがあります。
一つ目は、Rangeの指定方法は
Range(Cells(a, b), Cells(c, d))
とすべきで、セル範囲を指定する方法になります。
1セルだけを指定したければ、上記のような方法で事足ります。
二つ目は、
Range(Cells(a, b), Cells(c, d))
とした場合の、Cells(a, b)等はアクティブシートのセル指定となりますので、Rangeで指定しているブック、シートとアクティブシートが異なる場合にはエラーになります。
「Cells(a, b)」 の記述はブック、シートが省略されているものと判断されて、デフォルトのアクティブシートのセルだと解釈されます。
(たまたま、アクティブシートと一致していればエラーは発生しませんけれど・・)
イミディエイトウインドウやウォッチなど、エラーを探すためのツールがあるのですね。いろいろ試して勉強したみたいと思います。
ブックの拡張子を書いてみましたが、変わりませんでした。
アクティブシートについてもう少し調べて、頑張ってみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) 【至急】Excel 同一人物の情報を一行にまとめる(複数行) 6 2022/05/24 17:58
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別ブックをダイアログボックス...
-
VBA シートをコピーする際に Co...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAが途中で止まります
-
【困っています2】VBA 追加処...
-
ワイルドカード「*」を使うとう...
-
ユーザーフォームの切り替えに...
-
vbaでvbaProjectのパスワード解...
-
異なるブック間でのセル範囲の...
-
VBA シート名が一致した場合の...
-
EXCEL VBA 単語置き換え につい...
-
【VBA】全シートの計算式を全て...
-
元データ(ピボッド)を開かずマ...
-
vbaについて 主に以下のような...
-
エクセルのマクロを使ってメー...
-
エクセルのマクロについて教え...
-
ExcelのVBAです。フォルダ内の...
-
VBAで別ブックのシートを指定し...
-
シートをコピーする下記記述で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
【ExcelVBA】インデックスが有...
-
ワイルドカード「*」を使うとう...
-
【ExcelVBA】VBA実行でダイアロ...
-
ExcelのVBAです。フォルダ内の...
-
フォルダ内の全てのファイルに...
-
VBA コードを実行すると画面が...
-
VBA 別ブックからコピペしたい...
-
VBAで別ブックのシートを指定し...
-
VBS Bookを閉じるコード
-
vbaでvbaProjectのパスワード解...
-
【VBA】全シートの計算式を全て...
-
VBA シート名が一致した場合の...
-
【ExcelVBA】zip圧縮されたCSV...
-
複数のエクセルブックをひとつ...
-
VBSでExcelのオープン確認
-
VBAで別のブックにシートをコピ...
-
【Excel VBA】書き込み先ブック...
おすすめ情報
1.日報DBの移行2.xlsm
2.(”日報18-23”).(”重複データ”)の2つのシートは同じブック(”日報DBの移行2.xlsm”)内にあります。
3.マクロのコードは、「日報DBの移行2」内の「重複データ」に書いてあります。
コマンドボタンは、重複データのワークシート上にあります。
こんな感じで伝わりますか・・?
よろしくお願いします。