VBAのSelectメソッドの省略について

このQ&Aのポイント
  • VBAにおいてSelectを使用すると処理が遅くなると聞いたことがあるので、なるべくSelectを避けるべく以下のVBAを記述しました。
  • 内容は、シート「りんご」のA列~AN列に入っているデータを見出し項目を含めてコピー、そしてSheet1にペーストするというものです。(行数は毎回変化します。)
  • この場合は、Selectを使用せずデータをコピー&ペーストすることは不可能なのでしょうか…?!どなたかご回答いただけると嬉しいです、よろしくお願いいたします。
回答を見る
  • ベストアンサー

VBA Selectの省略

こんばんは、VBAのSelectメソッドの省略について質問させてください。 VBAにおいてSelectを使用すると処理が遅くなると聞いたことがあるので、なるべくSelectを避けるべく以下のVBAを記述しました。 内容は、シート「りんご」のA列~AN列に入っているデータを見出し項目を含めてコピー、そしてSheet1にペーストするというものです。(行数は毎回変化します。) ところが、以下を実行したところ、コピー&ペーストされたのは1行目の見出し項目のみでした。一方、「Range("A1:AN" ~」の前に「Sheets("りんご").Select」を入れたところ、全てのデータをコピー&ペーストすることができました。 この場合は、Selectを使用せずデータをコピー&ペーストすることは不可能なのでしょうか…?!どなたかご回答いただけると嬉しいです、よろしくお願いいたします。  '対象データのコピー&ペースト Sheets("りんご").Range("A1:AN" & Cells(1).CurrentRegion.Rows.Count).Copy Sheets("Sheet1").Paste

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

No.1, 3です。こちらから追加補足します。 > VBAにおいてSelectを使用すると処理が遅くなると聞いたことがあるので、 > なるべくSelectを避けるべく以下のVBAを記述しました。 (改行は筆者) Selectメソッド 自体は、 必要な(或いは避けられない)場面もあるし、 Selectした方が処理が速くなる場面もありますし、 より高速な処理を目指した時に わざとSelectを用いて優れた結果に繋がるようなケースもあります。 問題になるのは、 Selectメソッドと、それに続くSelectionオブジェクト、 この、組合わせ、のことであって、 "避けるべく"理由というのも、 「処理が遅くなる」からだけではありません。 スクリプトの行数(文字数)が増える→読みづらい→後から編集するのが面倒 というのが、Select+Selectionが忌避される理由としては普通なのでは、と思います。 特にSelectionについては、 多様なオブジェクトを格納する為の(Global.Selection)プロパティですので、 会話の組み立てが苦手な人の指示代名詞(これそれ...)の如く、 言語としての不確実性を残す傾向にある、とも言えます。 簡素な記述にしておくことは、コーディングに際して、 物理的にも、思考過程の面から言っても、早く仕事を片付けられる、 というメリットにも繋がることだと考えます。 コピーの仕方、にも色々あって、それぞれ一長一短、と私は思いますが、 一応、補足しておきます。 「セル範囲をコピーして、シートに貼り付ける」 というのが、質問での処理の流れです。   With Sheets("りんご")     .Range("A1:AN" & .Cells(1).CurrentRegion.Rows.Count).Copy   End With   Sheets("Sheet1").Paste でも実はこれ、Sheet1で選択されたセル、またはセル以外のオブジェクト に貼り付ける、という処理なので、 ある意味、Selectionに依存していることになります。 そこで、貼付け先を明示的。限定的にして、 「セル範囲をコピーして、指定のセル範囲に貼り付ける」   With Sheets("りんご")     .Range("A1:AN" & .Cells(1).CurrentRegion.Rows.Count).Copy   End With   Sheets("Sheet1").Cells(1).PasteSpecial Paste:=xlPasteAll のように書くことも出来ます。 .PasteSpecialメソッドは、値の貼付けを初め、Excelの[形式を選択して貼付け] に対応した複数の貼付け方法を提供するものです。 最初の回答の時点で、こちらを提示するか結構迷ったのですが、 訊かれていること以外に踏み込んで本題が霞むのは本意でないので、 No.1のように書くことにしました。 普通は、これらの記述に続けて、   Application.CutCopyMode = 0 として、貼付け待機状態(コピー元周囲の点滅アニメ―ション)を解除したり、 条件付きでクリップボードを解放したり、という処理に繋げるものでもあります。 また、フツーにコピペするだけでしたら、No.4でのご回答のように、   With Sheets("りんご")     .Range("A1:AN" & .Cells(1).CurrentRegion.Rows.Count).Copy Destination:=Sheets("Sheet1").Cells(1)   End With [コピー先のセル範囲]を引数に指定して、直接貼付け、 クリップボードを経由しないで、より簡潔に書ける方法もあります。 先に一長一短、と書きました。 誰にでも理解され易い、 初学者にも理解され易い、 というのも、それぞれ、ひとつの尺度だと常々思っています。 (逆に、"処理が遅くなる"というのも、ひとつの尺度に過ぎません。) (また、"処理が遅くなる"のを避けることが、ご質問の主題とは捉えていません。) 私としては、段階を追って、実践する中で、 今やろうとしていることを確かなものにするように ひとつひとつ覚えていって貰えたらな、と思っています。 そういう意味ではこの回答自体まったくの蛇足なのですけれども、 ご自分のペースで、急がなくてもいいですよ、ってな感じの補足でした。

osashi
質問者

お礼

Destinationの使用法についてご教示いただいてありがとうございます!確かに、誰が見ても分かりやすい記述方法というのも大事なので、あまりに処理が速いことにこだわってもだめですね( ;∀;)何度もご回答いただきありがとうございます、ベストアンサーに選ばせていただきますね!

その他の回答 (5)

  • SI299792
  • ベストアンサー率48% (715/1477)
回答No.6

CurrentRegion は空白のセルで囲まれた範囲を読み取るもので、最終行の指定はできません。途中に空白があればそこまでになります。 最終行までコピーしたいなら、はSpecialCellsを使います   Dim L As Long '   L = [A1].SpecialCells(xlLastCell).Row   Sheets("りんご").Range("A1:AN" & L).Copy   Sheets("Sheet1").Paste 次の書き方もあります。   Dim L As Long '   L = [A1].SpecialCells(xlLastCell).Row   Sheets("りんご").Range("A1:AN" & L).Copy Sheets("Sheet1").[A1] 数字だけコピーする場合、次の方法がいいです。   Dim L As Long '   L = [A1].SpecialCells(xlLastCell).Row   Sheets("Sheet1").Range("A1:AN" & L) = Sheets("りんご").Range("A1:AN" & L).Value

参考URL:
http://www.niji.or.jp/home/toru/notes/8.html
osashi
質問者

お礼

確かに何度かテストで試したところ、空白セルがあるとそれ以後のデータは選択しなくなりました!(;゜Д゜)分かりやすいページもご提供いただき、ありがとうございます!参考にさせていただきますね!

回答No.4

Cells(1)と書くと、ActiveSheet.Cells(1)になります。 Sheets("りんご").Selectを入れると、ActiveSheetが"リンゴ"になるので想定した通りの動作になったのでしょう。 >VBAにおいてSelectを使用すると処理が遅くなると Selectというか、ActiveSheetを変更する処理は遅いですが、それ以上に >Sheets("りんご").Range("A1:AN" & Cells(1).CurrentRegion.Rows.Count).Copy >Sheets("Sheet1").Paste クリップボードを使うCopyメソッドは処理に時間が掛かります。 Destinationを指定した、クリップボードを介さないCopyメソッドへ変更しましょう。

osashi
質問者

お礼

クリップボードを使うのにも処理に時間がかかるのですね!ご指摘ありがとうございます<m(__)m>早速、Destinationを使用する方法を調べてみようと思います。

回答No.3

んー、と。 本題と逸れた方向に向かう流れ、は停めたいのですが、、、。 NO.1で私が書いた、 > Sheets("りんご")のようなオブジェクトアクセスを繰り返すのも > 記述を煩雑にし処理を遅くする原因になりますから、 については、一般的な内容だとは考えていますが、  記述を煩雑にし処理を遅くする原因に[も]なりますから、 ぐらいに書くべきだったかな、と。 確かに1、2回の繰り返しでは、処理速度に変化が見られたとしても、 測定誤差レベルの微かなものでしかありませんから、あまり意味ないです。 でもこれらの記述をループ処理の中で繰り返し実行するかも知れない、 今後、外部オブジェクト等アクセスに時間の掛かるオブジェクトを 扱う機会があるかも知れない、 という、プログラムの基本的なことを、 応用場面で困ることのないように覚えておいて貰いたいことを記した つもりです。 以下、蛇足になります。  Cells(1) なのか  Range("A1") なのか という、このページの主題から逸れた議論(?) が投げられているようですが、  単セルの扱いはCellsが有利、  複数セルで、参照文字列による参照が可能な場合はRangeが有利、 (掻い摘んで、あえて曖昧に書きました) といった、指標ともいうべき複数の記事が出始めてから、十数年経って、 今、議論に値する内容ではない、と私は思います。 提議された回答者さん、 imogasiさんがリンク張ることの多い超有名ライターさんも、 何度か書かれていらっしゃいますし、、、。 多数のライターさんが同趣旨のことを書いていらっしゃいますし、 このことを知らなくても 実戦的なコーディング経験を積んでいるうちに、多くのVBA編集者が、 こういった使い分けに収束しているのではないかと私は思います。 または私なりの理由づけを説明することも出来ますが、 限られた文字数では到底無理なことです。 つまり議論にはなりようのないことなのですが、 このサイトの運営趣旨に倣って閲覧者のご判断に委ねます。 私としては、そこは本題とは関係ないですから、 あんまり引っかからないでね、と質問者さんへのメッセージ のつもりで書いています。  20170920  realbeatin

osashi
質問者

お礼

単一セルはCells,複数セルはRangeといった使い分けは全然考えていなかったです…!目から鱗です(^O^)VBAは奥が深いですね…、道のりはまだまだ長そうです、ご回答いただき、ありがとうございました!

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Cells(1). はSheets("りんご")の第1番目(Indexが1)、すなわちAN1を指してしまって、Range("A1:AN1")すなわち、第1行目を選択してコピーしてしまう。 だから、この質問は、.SELECTの問題でないのでは。 CurrentRegion.Rows.Countが1になってしまう。 CurrentRegion.は、単一セルを指定して、そのセルを含むセル範囲を求めたいときに使う例をよく見る。複数セルの塊(連続セル)の範囲を指定して、CurrentRegionは使われるのを見たことがない(ただし私のVBAの経験は大したことないが)。 >Cells(1).CurrentRegion.Rows.Countは、何をしようとしているのだろう。 難しく表現しているだけでは? Sheets("りんご").Range("A1").CurrentRegion.Copyではだめなのかな。 Cells(1)は何をしようとしているのだろう? また本件と直接関係ないと思うが、Cellsの直前に具体的にシートの修飾(限定)を加えるようにした方がよいように思う。 Sub test01() ActiveCell.CurrentRegion.Select End Sub は A1:C5にデータがある場合、 A1セルだけを選択していても、A2:C2を選択していても、実行後はA1:C5を範囲指定する。 ということは、解説に 式.CurrentRegion 式 Range オブジェクトを表す変数。 とあるから、複数セル範囲を指定しても、間違いではないとは思うが。 >CurrentRegion.Rows.Count) 下記も上の私のデータ例では、4になり、A1:C4を範囲指定する。 Sub test() Cells(1).CurrentRegion.Select MsgBox Selection.Rows.Count End Sub それで Sub test03() Range("A1").CurrentRegion.Select End Sub と同じなので、質問のコードの書き方は、ややこしいだけでは? >処理が遅くなると聞いたことがあるので マクロの記録の結果によく出るように、Selectを多用すると、私はコードが冗長になり、読むとき、うるさいので避けたい。 私のレベル(少ないコード数で繰り返しも大したことはない)は、処理の時間を気にするレベルではないので、そちらの観点は重く考えていない。 VBAで勉強することが他にたくさんある。

osashi
質問者

お礼

確かにRange("A1").CurrentRegionでもいけるような気がしてきました…(>_<)いったい何が違うんでしょう…。最終行やデータ選択のVBA沢山あるので、まだ使い分けがはっきり理解できないです(T_T)ご回答いただいて、ありがとうございました!

osashi
質問者

補足

おおお!自分でテストしてみてわかりました!どうも、Range("A1:AN" & Cells(1).CurrentRegion.Rows.Count).Copyのほうは、ANの列のデータまでしか選択してくれません。Range("A1").CurrentRegionはAN列以降の列のデータも選択してくれました!

回答No.1

こんにちは。 Cells(1).CurrentRegion.Rows.Count の部分にご注目。 ご提示の記述では、アクティブシートの[A1]セルを基準に 行数を取得しています。 意図しているのは、Sheets("りんご")の[A1]セルを基準に 行数を取得するということなのでは? その場合、   Sheets("りんご").Range("A1:AN" & Sheets("りんご").Cells(1).CurrentRegion.Rows.Count).Copy   Sheets("Sheet1").Paste のようにシートを適切に指定することになります。 Sheets("りんご")のようなオブジェクトアクセスを繰り返すのも 記述を煩雑にし処理を遅くする原因になりますから、 例えばWithステートメントを使って、記述の重複を避け、   With Sheets("りんご")     .Range("A1:AN" & .Cells(1).CurrentRegion.Rows.Count).Copy   End With   Sheets("Sheet1").Paste のような書き方を選ぶのが一般的です。  .Range .Cells のように先頭に . を付けて、 Sheets("りんご")を親オブジェクトに指定していることになります。 以上です。

osashi
質問者

お礼

なるほど!Cells(1)の前にシート名が隠されていたのですね…!どうも最終行までを指定するVBAの理解がなくて…ありがとうございます!また一つ勉強になりました<m(__)m>

関連するQ&A

  • Excel Selectは使わない? VBA

    おはようございます。 ExcelのVBAを独学しております。 いまさらな質問だとは思いますが、 そこで、色々調べていたところ 「Select」はあまり使うな! ということが良く出てきました。 selectを使わず、上手くシート移動などができるのでしょうか? 私が組んでいるものは、色んなシートを切り替えなければならなく、 毎回Selectしています。 Activateを使ったこともありますが、 エラーが多発し、良く分からなかったためSelectを使用しています。 出来れば、シートをアクティブにすることなく 操作ができれば良いのですが・・・ 例)「データ」「コピー」のシートがあります。 「データ」シートのAからD列を「コピー」シートにコピー しようとするものです。 WorkSheets(データ).select Range("A1").select Range("A:D").select selection.copy Worksheets("コピー").select Range("A1").select ActiveSheet.Paste どうしてもSelectを多様してしまいます。 ●Selectを使わないデータの入力方法 ●Selectを使わず、シートをアクティブにしなくても良い参照方法 ●どうしてもSelectを使わないといけない場面 ●Selectを使うのを回避するためには・・・ などなど、ご存知でしたら回答お願い致します。

  • EXCEL VBA オートフィルで別シートへコピー

    EXCEL VBA オートフィルで別シートへコピー しようとしたら、うまくいきません 別々に書くとうまくいくのですが コードを一緒にするとうまくいきません? コード *********************************************** Sub 抽出別シート() Worksheets("時間合計VB").Select ' 時間合計VBのシートを選択 Range("A1").AutoFilter field:=8, Criteria1:="<=1" '1時間以下の8列目のをフィルター end sub sub カレントで別シートへコピー() Range("A1").CurrentRegion.Copy Sheets("1hdown").Range("A1")   'それをカレントして別シートのA1へコピー Range("A1").AutoFilter End Sub *********************************************** このように書くとうまくいくのですが これを一緒に書くと別シートへコピーがうまくいきません。 全てコピーされてしまいます +++++++++++++++++++++++++++++++++++++++++++++++ 一緒にしたコードです +++++++++++++++++++++++++++++++++++++++++++++++ *********************************************** Sub 抽出別シート() '1h以下をを抽出別シートへコピー Worksheets("時間合計VB").Select ' 時間合計VBのシートを選択 Range("A1").AutoFilter field:=8, Criteria1:="<=1"    '1時間以下の8列目のをフィルター Range("A1").CurrentRegion.Copy Sheets("1hdown").Range("A1")    'それをカレントして別シートのA1へコピー Range("A1").AutoFilter End Sub *********************************************** 意味が分かりませんどなたかおしえていただけませんでしょうか? よろしくお願いいたします

  • エクセルVBAによるシート間コピー&ペースト

    「データベース控え」と「手番」という2つのシートがあります。 今、シート「データベース控え」を開いています。 VBAを使って「手番」シートにA3:S3をコピー&ペーストする記述方法を教えて下さい。 マクロで表現すると以下の記述となります。 繰り返し処理をする実運用では画面が切り替わるなどスマートな方法ではないので困っています。 Range("A3:S3").Select Selection.Copy Sheets("手番").Select Range("A3").Select ActiveSheet.Paste Sheets("データベース控え").Select Range("A4").Select 実運用では数値の部分を変数に置き換えて繰り返し処理をしたいと思っています。よろしくお願いいたします。

  • VBAの1行目のコピー

    EXCEL2010のマクロで困っております。皆様のお力をお貸しください。 環境:WindowsXPSP3 office2010 EXCEL2010です。 やりたい事、BookAとBookBがあります。BookAにはたくさんのSheetがあります。これを、これを一つのSheetにまとめました。このSheetをBookBにコピーしました。そこで、1行には、項目入っています。A1には、生徒の名前、A2には、男女別、・・・と言うふうにA1~AW1まで入っています。A2行以下にはたくさんのデータが入っています。このデータは、BookBの一つのSeetにコピーしました。BookAのデータ行が沢山ある場合は、良いのですが、少ないと、BookAの一行目の項目の入った部分だけがBookBの一つのSheetにコピーできません。一行目のコピーの仕方は下記の通りです。 Sheets(4).Range("A1:AW1").CurrentRegion.Copy Sheets("Sheet" & sheetsuu).Range("A1:AW1") そこで、BookAのデータが少ない時にも一行目の項目をコピーしたいのですが、どうすれば良いかご教授願います。宜しくお願い申し上げます。

  • エクセルVBAの貼付けについて

    エクセルVBAの貼付けについて シートAとBがあって、シートBの1~7列をコピーし、シートAの最終行に貼り付ける方法を教えて下さい。 下記のように書いてみたのですがダメでした。 Sheets("B").Select Rows("1:7").Select Selection.Copy Sheets("A").Select With Range("A1").End(xlDown).Offset(1, 0) .ActiveSheet.Paste End With

  • 【エクセル VBA マクロ】

    シートAの日付を確認してデータをコピーし、シートBの該当する日付の列に売り上げを貼り付けるというマクロを組みたいです。 他の方達のを参考にしながら作成しましたが、実行をすると「エラー1004」 Matcheプロパティが見つからないというエラーが出ます。 どなたか原因と対策を教えてください。 Sub() Sheets("シートA").Select Range("J3:J10000").Select ※売上データ Selection.Copy 検査値 = Range("R2").Value ※日付データ Sheets("シートB").Select Set 検索範囲 = Range("J4:AN4") ※日付データ 列 = Application.WorksheetFunction.Match(検査値, 検索範囲, 0) Cells("4, 9" + 列).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,SkipBlanks:False, Transpose:=True End Sub

  • 複数シートの内容を1つのシートに集計するVBA

    お世話になります。 ExcelのVBAについて質問させていただきます。 集計.xlsというブックがあります。 この中に[集計]、[東京支店]、[名古屋支店]、[大阪支店]というシートがあります。 やりたい事は[東京支店]、[名古屋支店]、[大阪支店]のシート内容を[集計]シートに順番にコピペしていきたいのです。 下記のVBAを組んでみましたがうまくいきません。 [東京支店]はうまくコピペ出来ますが、[名古屋支店]がコピペされず、[大阪支店]はコピペされますが東京支店のデータのすぐ下ではなく、50行ぐらい下の位置にコピペされてしまいます。 各支店のシートの内容は次の通りです。この内容を[集計]シートにコピペしたいのです。 [日付] [担当者] [金額] 11/1 田中 100円 11/2 山田 500円 どなたかご教授いただけますでしょうか? 環境 Windows XP SP3 Excel2003 ****VBA**** Sub test() Dim 下 As Integer '東京支店 Sheets("東京支店").Select Range("A2").Select '東京支店シートの見出し以外の全データをコピー Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy '集計シートに貼り付け Sheets("集計").Select Range("A2").Select ActiveSheet.Paste '次は名古屋支店 Sheets("名古屋支店").Select Range("A2").Select '名古屋支店シートの見出し以外の全データをコピー Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy '集計シートの最下行を取得 Sheets("集計").Select 下 = Range("A1").CurrentRegion.Rows.Count + 1 '集計シートに貼り付け Range("A2").Select ActiveCell.Offset(下 & "," & 0).Select ActiveSheet.Paste '最後に大阪支店 Sheets("大阪支店").Select Range("A2").Select '大阪支店シートの見出し以外の全データをコピー Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy '集計シートの最下行を取得 Sheets("集計").Select 下 = Range("A1").CurrentRegion.Rows.Count + 1 '集計シートに貼り付け Range("A2").Select ActiveCell.Offset(下 & "," & 0).Select ActiveSheet.Paste End Sub

  • VBA 隣のシートへ、コピーペーストするマクロ

    質問があります ボタンにマクロを登録して、押下するとシート3から特定の列4行のみ全てコピーして(100~500件で変動)、シート1の固定された開始地点からペーストするマクロです 以下のソースは文章で表現した通りのものとなっていますでしょうか? ------------------------------------------------------------------------------------ Sub ボタン登録コピーペースト () MsgBox "マクロを実行しました" Sheets(3).Select‘コピー元データ(シート3) Range("C:C,M:M,AE:AE,AF:AF").Select ‘4列の変動するデータすべて100~500件 ‘選択します Selection.Copy Sheets(1).Select‘コピー先データ Range("C70").Activate‘まず固定開始位置C70を選択する Selection.PasteSpecial Paste:=xlPasteValuesApplication.CutCopyMode = False ‘4列のデータ数百件すべてコピーする End Sub ------------------------------------------------------------------------------------

  • エクセルマクロVBAについて

    エクセルマクロVBAについて、こんなこと出来ますか? ■A列からAS列の1行目にヘッダー情報をもつデータベース ■A列に担当者名 ■A列にオートフィルタをかけて各担当ごとにデータを抽出したものを別シートに貼り付けて自動印刷したい ■担当者は都度変わるので、Criteria1:="xxx"というようには直接書けない(担当名を自動で抽出したい) ■担当者の数も都度変わる ■補足 一行のデータを特定の雛形に転記する必要があるので別シートに出したいです ちなみに、アナログで記録したコードは以下です。 Sub test1() Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="山田" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="斉藤" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="田中" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub これ、担当者の抽出を自動でなんとかなりませんか?

  • VBAについて教えて下さい

    作業内容 (1) 「 初期入力 ! B列 」 ダブルクリック VBAProject ⇒ 「 初期入力 ! 」 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Cells.Count > 1 Then Exit Sub If Target.Column <> 2 Then Exit Sub ドロップダウン代わりに「Data ! 」を表示 Sheets("Data").Activate End Sub (2) 値をダブルクリックして、「初期入力」に戻る。 VBAProject ⇒ 「 Data ! 」 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Range("FC63364").Activate Sheets("初期入力").Activate ’選択した値を「初期入力!」シートに戻す ActiveCell.Value = Target.Value End Sub ここまでが現在の作業です。 現在の工程内に下記を増やしたいのですが、エラーが出て増やせません。教えて頂けませんか> (3) 「Data ! FB63375,FG63375,FI63375」 を 「拾い出し ! K4」 にコピー&ペーストしたいです。 「Data ! FB63375」⇒「拾い出し ! K4」へ 「Data ! FG63375」⇒「拾い出し ! L4」へ 「Data ! FI63375」⇒「拾い出し ! M4」へ Range("FB63375,FG63375,FI63375").Select Range("FI63375").Activate Selection.Copy Sheets("拾い出し").Select Range("K4").Select ActiveSheet.Paste Sheets("Data").Select End Sub *次回「Data!FB63375,FG63375,FI63375」をコピーすると、前回コピーされた下の行「拾い出し ! K5」にコピーするようにしたいです。 (4) Data!FC63367:FI63374」を「拾い出し!O4」にコピー&ペーストしたいです。 Range("FC63367:FI63374").Select Selection.Copy Sheets("拾い出し").Select Range("O4").Select ActiveSheet.Paste Sheets("Data").Select End Sub *次回「Data!FC63367:FI63374」をコピーすると前回コピーされた下の行「拾い出し!O11」にコピー&ペーストしたいです。 お分かりになられる方おられましたら、教えて頂けませんか? 宜しくお願いします。

専門家に質問してみよう