VBAについて教えてください

このQ&Aのポイント
  • VBAについて教えて頂けませんか?初期入力のセルをクリックした際にダブルクリックの動作を作りたいです。
  • また、「初期入力」シートから「拾い出し」シートへデータをコピー&ペーストしたいです。
  • 具体的には、「Data ! FB63375,FG63375,FI63375」の範囲を「拾い出し ! K4, L4, M4」にコピーしたいです。また、「Data ! FC63367:FI63374」の範囲を「拾い出し ! O4, O11」にコピーしたいです。どなたか教えていただけませんか?
回答を見る
  • ベストアンサー

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」にコピー&ペーストしたいです。 お分かりになられる方おられましたら、教えて頂けませんか? 宜しくお願いします。

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

>エラーが出て増やせません。  どこでエラーが出るのか存じませんが...。 >前回コピーされた下の行「拾い出し ! K5」にコピーするようにしたいです。 (3) の Range("K4").Select を If Range("K4").Value = "" Then  Range("K4").Select Else  Range("K" & Rows.Count).End(xlUp).Offset(1).Select End If に、 >前回コピーされた下の行「拾い出し!O11」にコピー&ペーストしたいです。 (4) の Range("O4").Select を If Range("O4").Value = "" Then  Range("O4").Select Else  Range("O" & Rows.Count).End(xlUp).Offset(1).Select End If に変更してみられたらどうなるでしょうか?  ちなみに、 >前回コピーされた下の行「拾い出し!O11」 ではなくて「拾い出し!O12」だと思われますが...。

pairakku
質問者

お礼

DOUGLAS_さん、回答ありがとうございます。 エラーが出ずに出来るようになりました。 ありがとうございました。 今後共、よろしくお願いします。

pairakku
質問者

補足

DOUGLAS_さんに教えて頂いたのを、早速実行させて頂きました。 (マクロの登録) VBAProject ⇒ Module2 Sub Macro1() Range("FB63375,FG63375,FI63375").Select Range("FI63375").Activate Selection.Copy Sheets("拾い出し").Select If Range("K4").Value = "" Then Range("K4").Select Else Range("K" & Rows.Count).End(xlUp).Offset(1).Select End If ActiveSheet.Paste Sheets("Data").Select (結果) 一回目は、「K4」、「L4」、「M4」に値が入りました。 2回目は、「K93」、「L93」、「M93」に入りました。  (希望) 2回目は、「K5」、「L5」、「M5」に入るようにしたいです。 「K2:M93」に罫線が引いてあります。それでですかね~? (マクロの登録) VBAProject ⇒ Module2 Sub Macro2() '「Data!FC63367:FI63374」を「拾い出し!O4」にコピー&ペースト Range("FC63367:FI63374").Select Selection.Copy Sheets("拾い出し").Select If Range("O4").Value = "" Then Range("O4").Select Else Range("O" & Rows.Count).End(xlUp).Offset(1).Select End If ActiveSheet.Paste Sheets("Data").Select End Sub (結果) 一回目は、「O4:U11」に値が入りました。 2回目も、「O4:U11」に入りました。  (希望) 2回目は、「O12:U19」に入るようにしたいです。 すみませんが教えて頂けませんか? よろしくお願いします。

その他の回答 (1)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

>Sub Macro1() >2回目は、「K93」、「L93」、「M93」に入りました。  >「K2:M93」に罫線が引いてあります。それでですかね~?  罫線は関係ありません。  1回目が終わった後で「K4」を アクティブ にして、[Ctrl] + [↓](下矢印)を押下してみてください。  私の意図通りでしたら、アクティブセル は「K65536」になるはずです。  もし、途中の セル で カーソル が止まるようでしたら、見た目何も入っていないようでも スペース などが入っています。  [回答番号:No.1] の コードは、「K5:K65536」に何も入っていないことが前提の コード ですので、不要な スペース 等が入っている場合には、初期設定として、「K4:K65536」の範囲は クリア(範囲選択後 [Delete])しておいてください。 >Sub Macro2() >2回目も、「O4:U11」に入りました。   想像ですが、一回目に、「O4:U11」に値が入ったときに「O4」セルが ブランク になっている、というようなことはありませんか?  そういう場合もあるのでしたら、コード を書き換えなければなりません。  この点につきましては、「Sub Macro1()」も同様です。

pairakku
質問者

お礼

DOUGLAS_さん、回答ありがとうございます。 うまく出来ました~! DOUGLAS_さんのおっしゃる通りです。 Sub Macro1()はK5以降に数式が入っていた為、駄目だったようですね~ Sub Macro2()の方も、うまく出来ました。 今回の事で、色々勉強になりました。 DOUGLAS_さん、何度もお答え頂きありがとうございました。 今後共、よろしくお願いします。

関連するQ&A

  • マクロ実行後、画面がちかちかしない方法

    こんばんわ! VBAを実行すると、画面がちかちかします。 シートを行ったり来たりしているせいでしょうね? 自分で、色々やってみたのですが、エラーばかりで全然できません。 シートを行ったり来たりしなくてもいいVBAを作るには、どこを直せばいいでしょうか。 教えて頂けませんか? (現在のVBA) (1)「Data!FB63376,FG63376,FI63376」を「拾い出し!K4」にコピー&ペースト 値が入っている場合、下の行に貼付け。 Sub Macro1() Range("FB63376,FG63376,FI63376").Select   Range("FI63376").Activate Selection.Copy Sheets("拾い出し").Select If Range("K4").Value = "" Then Range("K4").Select Else Range("K" & Rows.Count).End(xlUp).Offset(1).Select  End If ActiveSheet.Paste Sheets("Data").Select (2)「Data!FO63367:FQ63372」を「拾い出し!O4」に値のみをコピー&ペースト 値が入っている場合、下の行に貼付け。 Range("FO63367:FQ63372").Select Selection.Copy Sheets("拾い出し").Select If Range("P4").Value = "" Then Range("P4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Else Range("P" & Rows.Count).End(xlUp).Offset(1).Select End If Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Data").Select Application.CutCopyMode = False End Sub 以上です。 お分かりになる方教えて頂けませんか? 宜しくお願いします。

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

    エクセル2003を使用してます。 ("Sheet1")のB列をダブルクリックすると、 ("Sheet2")の("AA100")を表示するようにしたいのですが、 ■の部分がエラーが出て、色々変更して試してるのですが駄目です。 どう言う風に、書けばいいのかわかりません。 どなたか教えて頂けませんか? 下記VBAです。 ──────────────────────────────── Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Target.Column <> 2 Then Exit Sub Sheets("Sheet2").Activate ■Range("AA100").Select End Sub ──────────────────────────────── よろしくお願いします。

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • エクセルVBAで再質問です。

    QNo4011183で質問したもので、また質問です。 前回の回答で、以下のような良回答をいただきました。 A1セルで名前を選択して、その名前と同じ定義済みの別シートの範囲 を、違うシートにコピーする、というものです。 使っているうちに気づいたのですが、コードを書いてあるシート のどこを入力しても反応(メッセージがでます)してしまいます。 これは、回答者様からのコードを自分の設定に合わせて変更した ものですが、このように使っています。この場合、「入力」シート のG10セルのリスト(入力規則)で選択されたものに反応してくれ たらいいのですが、他のどのセルでも反応し、“変更しました。” と書いてあるメッセージが出ます。これをなんとかできないでし ょうか?度々すみませんが宜しくお願いします。 Private Sub Worksheet_Change(ByVal Target As Range) Sheets("組版").Select ActiveSheet.Range("A13:V21").Clear Sheets("入力").Select If Target.Address = "$G$10" Then Sheets("登録").Range(Target.Value).Copy Sheets("組版").Range("A13").PasteSpecial Paste:=xlAll Application.CutCopyMode = False End If MsgBox "変更しました。" End Sub

  • VBA のエラーがわかりません・・・w

    Sub Worksheet_Change(ByVal Target As Range) Dim 初期値 As Integer Dim 増減値 As Integer Select Case Target.Address Case "$C$5" Select Case Target.Value Case 1 Range("C6").Value = 24 Range("D5").Value = 600 Range("D6").Value = 0 Range("E5").Value = 400 Range("E6").Value = 0 Range("B7").Value = "★1 MaxAttackPoint:700 / MaxDeffencePoint:900" Case 2 Range("C6").Value = 32 Range("D5").Value = 1000 Range("D6").Value = 0 Range("E5").Value = 500 Range("E6").Value = 0 Range("B7").Value = "★2 MaxAttackPoint:1100 / MaxDeffencePoint:1300" End Select Case "$D$5" Select Case Range("C5").Value Case 1 初期値 = 600 Case 2 初期値 = 1000 Case Else Exit Sub End Select If Target.Value < 初期値 Then 増減値 = 4 Else 増減値 = 8 Range("D6").Value = (初期値 - Target.Value) / 100 * 増減値 Case "$E$5" Select Case Range("C5").Value Case 1 初期値 = 400 Case 2 初期値 = 500 Case Else Exit Sub End Select If Target.Value < 初期値 Then 増減値 = 4 Else 増減値 = 8 Range("E6").Value = (初期値 - Target.Value) / 200 * 増減値 End Select End Sub Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$F$5" Select Case Target.Value Case "炎" Range("F6").Value = 4 Case "水" Range("F6").Value = 4 End Select   Case "$G$5" Select Case Target.Value Case "ドラゴン" Range("G6").Value = -8 Case "海竜" Range("G6").Value = -8 End Select Case "$H$5" Select Case Target.Value Case "ドラゴン" Range("H6").Value = -16 Case "海竜" Range("H6").Value = -16 End Select Case "$I$5" Select Case Target.Value Case "○" Range("I6").Value = 40 Case "×" Range("I6").Value = 0 End Select End Select End Sub とあるカードゲームのステータス決定を行う為に組まれたマクロです。 作成者は私だけではないのですが、もう何回もしつこく質問をしているため 気が引けてしまい、こちらで質問することにしました・・・w   エラー内容は 2つ目のSub Worksheet_Change(ByVal Target As Range)の 「Worksheet_Change」の名称が間違っています。 という事でした。何を入れればいいのかサッパリです(;´ω)   エラーの改善方法について教えてください。 宜しくお願いします

  • VBAがうまく動きません。

    エクセルVBAで実行時は正確に動かないが、ステップインでは正常に作動するのはなぜですか? 入力シートに入力された情報を元にデータシートから抽出を行い、新規シートを開き、そこでリストにしたい情報のみを編集(不要なタイトル行などの削除)して、自動で貼り付けと名前の定義を行うマクロを作っています。 ステップイン[F8]や実行[F5]では正常に作動するのですが、実際に使用してみると、抽出データが貼り付けされていない状態(セルは空白)となりますが、名前の定義は抽出データと同じ行まで定義されているので、貼り付けのみ上手くいっていないように思われます。 下記が作成したコードです。情報が足りないようでしたら、申し訳ありません。 お手上げ状態となっていますので、お力添えいただけると幸いです。 Dim syurui as String Dim suuryou as Integer Dim target as Range Private Sub Worksheet_Change(ByVal target As Range) If Intersect(target, Range("D7")) Is Nothing Then Exit Sub Else Call 抜出 End If End Sub Sub 抜出() Worksheets("データ").Activate ’後に出てくる名前初期化でエラーを防ぐため仮定義 ActiveWorkbook.Names.Add Name:="番号", _ RefersTo:=Worksheets("データ").Range("K2") syurui = Worksheets("入力").Range("D9").Value Worksheets("データ").Select Set target = Worksheets("データ").Range("M2") With Worksheets("データ").Range("D1") .AutoFilter field:=4, Criteria1:=syurui .CurrentRegion.SpecialCells(xlVisible).Copy With Worksheets.Add .Paste ’不要な行を削除 .Rows(1).Delete .Range("A:D").Delete .Range("B:F").Delete ’抽出した情報を貼り付け&新規シート削除 .UsedRange.Copy target Application.DisplayAlerts = False .Delete Application.DisplayAlerts = True End With .AutoFilter End With ’抽出データの最終行を調べる suuryou = Worksheets("データ").Cells(65536, "M").End(xlUp).Row If suuryou = 1 Then Worksheets("入力").Activate Exit Sub Else Range("番号").Name.Delete ActiveWorkbook.Names.Add Name:="番号", _ RefersTo:=Worksheets(”データ").Range("M2:M" & suuryou) End If Worksheets("入力").Activate End Sub

  • VBAについて

    いつもお世話になっています マクロ・VBA超初心者です。 質問させてください。 現在シート1の完売のセルの欄に○が入っていれば日付をみてシート2の同じ日付の隣のセルに○を入力しようと思っているのですが、シート2の日付を検索はしているんですが入力がいきません Sheet1  ↓セルA1 ↓セルB1  5月26日   26           B1のセルはDAY(A1)にて出してます         完売  A氏     ○             Sheet2  ↓A列   ↓B列 5月  1日  ・  ・  ・  26日    ○           ←シート1の所に○が付いているとシート1セルB1と同じ  27日                  日付の隣のセルに○を入力  28日 VBA Sub test() Sheets("Sheet2").Select Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate If ActiveCell.Value = Worksheets("Sheet1").Range("B2") Then ActiveCell.Offset(0, 1).Activate If ActiveCell.Value <> "○" Then ActiveCell.Valu = "○" ActiveCell.Offset(0, -1).Activate Else ActiveCell.Offset(0, -1).Activate End If Else End If Loop Sheets("Sheet2").Select Range("A1").Select End Sub どこが間違っているかわからない状態です。 分かりにくい説明ではあるんですが教えてください お願いします。

  • エクセルVBA 1つのシートで出来ますか?

    説明が下手で申し訳ございませんが、宜しくお願い致します。 sheet(1)に20個のボタンがあります。 ボタンをクリックすると、別のシートが開きます。 開いたシートにも複数のボタンがあり、そのうちの任意のボタンをクリックすると、そのボタンの値がsheet(1)のそれぞれのボタンに対応したセルに入力される、という動作を実現したいと思っています。 現状、下記のようなコードで目的の動作は実現できてはいるのですが、各ボタンそれぞれにシートを作っているような状況です。(データ自体は全く同じ内容のものが、計20シート) たぶん、もの凄く頭の悪い事をやっているんだろうと思います。 sheet(1)を除いた各シートの入力データ自体は全く同じなので、シート一枚で出来るんじゃないのかなと思い、ネットや本で調べながら色々試してみたのですが、どうも上手く行きません。データが同じでも、sheet(1)のクリックしたボタンによって入力するセルを変えなければならないのが問題です。 sheet(1)のボタンとセルの関連付けや、sheet(1)のどのボタンを押したのかの判別ができればいいのかなと思って調べてみても、初心者にはよく理解できず、もう何週間もチャレンジしているのですがお手上げです。 上級者の方の知恵をお借りできれば幸いです。 Sub sheet2を開く() Worksheets(2).Select End Sub Sub 入力1() Worksheets(1).Range("F8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("F8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("F8") = "データ3" Worksheets(1).Select End Sub Sub sheet3を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("H8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("H8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("H8") = "データ3" Worksheets(1).Select End Sub Sub sheet4を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("M8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("M8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("M8") = "データ3" Worksheets(1).Select End Sub    ・    ・    ・    ・    ・

  • excel VBA 2つのプロシージャを1つに

    いつもお世話になっております。 初心者ですが、苦しみながらもexcelでデータベースを作成しております。 さて Worksheet_Change のイベントが2つあり、これを一つにまとめようとしているのですが、がんばっているんですが、自分ではどうしてもうまくいかない為、投稿させていただきました。 コードは下記2つです。 また、どういったものを作ろうとしているのか説明不足でご指摘を頂戴することもありますので、試作段階のファイルですが、アップローダーにあげさせていただきました。確認頂ければ幸いです。 ■アプロダ 投稿No 4514 http://www.kent-web.com/pubc/book/test/uploader/uploader.cgi ■作ろうとしているデータベースの概要 inputシート・・・データを直接入力して、また、データや写真を閲覧をするシート dataシート・・・データを格納するシート、オートフィルタを使って、曖昧検索フィルタもここでかけたりします。 どうか良いお知恵を拝借させていただきたくよろしくお願いします。 '一つ目のプロシージャ(Noセルに数字が入ると、そのNoのデータを自動的にdataシートまで読みにいって表示させます) Private Sub WorkSheet_Change(ByVal Target As Range) 'No入力してデータ反映 Dim fRange As Range Dim fRow As Long If Target.row <> 4 Then Exit Sub If Target.Column <> 3 Then Exit Sub Set fRange = Sheets("data").Columns(1).Find(What:=Range("C4").Value, _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) If (fRange Is Nothing) Then '見つからなかった? MsgBox "入力された顧客コードが存在しません。", vbExclamation Exit Sub End If fRow = fRange.row '検索された顧客DCの行位置を求める Range("F4").Value = Sheets("data").Cells(fRow, 2).Value Range("C5").Value = Sheets("data").Cells(fRow, 3).Value Range("C6").Value = Sheets("data").Cells(fRow, 4).Value Range("C7").Value = Sheets("data").Cells(fRow, 5).Value Range("F5").Value = Sheets("data").Cells(fRow, 6).Value End Sub '二つ目のプロシージャ(写真を表示させるためのコードです) Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$k$4" myLoadPicture "board_Image", Target.Text, Range("I5") Case "$K$17" myLoadPicture "map_Image", Target.Text, Range("I18") Case Else Exit Sub End Select End Sub

  • VBA 最終行を選んだシートにコピーする。

    VBAど初心者です。どうしても最終行のデータを選んだシートにコピーできません。 LastRow.Selectのところで、止まってしまいます。どのように行を設定していいのかさっぱりわかりません。どなたか、ご指導のほどよろしくお願いします。 Sub copy_last_line() Dim LastRow As Long Sheets("Sheet1").Select LastRow = Cells(Rows.Count, 1).End(xlUp).Row LastRow.Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("A1").Select End Sub

専門家に質問してみよう