エクセル内でのVBAの質問です。

閲覧ありがとうございます。 エクセルの作業ファイルにてVBAのコードを作成しているのですが、中々思う通りに実行できない...

nishi6 さんからの 回答

  • 2019/09/27 10:39
  • 回答No.1
nishi6

ベストアンサー率 67% (868/1277)

他カテゴリのカテゴリマスター
質問内容を実現するコードを書いてみました。
検索する場所や値の設定方法を工夫すれば色々改良できるようにしたつもりです。
ボタンに回答のマクロを登録してください。

>可能ならば、コードの解説もつけてくださると嬉しいです。
コードにコメントを付けたのでわかると思いますが。。。

添付図のボタンを見ると、「フォームコントロールのボタン」のように見えます、「フォームコントロール」も場合によっては便利ですが、今は、「ActiveXコントロール」が一般的で、使いやすいと思います。参考までに。当方win10、Excel2010です。

Sub データ転送()
 Dim wb As Workbook      '// マクロを動かしているブック
 Set wb = ActiveWorkbook
 
 '// 探す日付(列)と探す文字(行)
 Dim schDate As Date      '// 探す日付(列)
 Dim schString As String    '// 探す文字(行)
 schDate = Range("F1")     '// 値をセット
 schString = "う"       '// 値をセット

 Application.ScreenUpdating = False '// 画面更新をストップ
 
 '// データ転送ソフト2を開く
 Dim BookPath As String    '// データ転送ソフト2.xlsxのパス
 Dim BookName As String    '// Book名
 BookPath = "C:\Users\nishi6\Documents"  '// **** ご自分のパスをセット ****
 BookName = "データ転送ソフト2.xlsx"    '// **** 実情に合うように変更 ****
 Workbooks.Open BookPath & "\" & BookName '// ブックのフルパス
 Dim wbDT As Workbook           '// データ転送ソフト2.xlsx
 Set wbDT = ActiveWorkbook
 
 '// データ転送ソフト2を調べる
 Dim r As Long      '// 行カウンタ
 Dim c As Long      '// 列カウンタ
 Dim findRow As Long   '// 見つけた値(行)
 Dim findCol As Long   '// 見つけた値(列)
 Dim findVal As Variant  '// 見つけた値(列)
 
 r = 1: c = 1       '// 行カウンタ、列カウンタの初期化
 Worksheets("A").Activate '// データ転送ソフト2.xlsxにフォーカス
 With Range("B4")     '// B4セルを起点にOffsetで調べる
  '// B列を調べる
  '// データがあって、見つからない場合、調べ続ける
  While .Offset(r, 0) <> "" And findRow = 0
   If .Offset(r, 0) = schString Then
    findRow = r
   End If
   
   r = r + 1 '// 次の行を調べる
  Wend
 
  '// 4行目を調べる
  '// データがあって、見つからない場合、調べ続ける
  While .Offset(0, c) <> "" And findCol = 0
   If .Offset(0, c) = schDate Then
    findCol = c
   End If
  
   c = c + 1 '// 次の列を調べる
  Wend
 
  '// 探した値を取り込む
  If findRow <> 0 And findCol <> 0 Then
   '// 見つかった場合
   findVal = .Offset(findRow, findCol)
  Else
   '// 見つからなかった場合は何もしない
  End If
 End With
 
 '// 結果を返す
 wb.Activate
 If findRow <> 0 And findCol <> 0 Then
  Range("T4") = findVal
 Else
  MsgBox "指定された日付:" & Format(schDate, "yyyy/m/d") & _
      " は見つかりませんでした。"
 End If
 
 '// データ転送ソフト2.xlsxブックを閉じる
 Application.DisplayAlerts = False
 wbDT.Close
 Application.DisplayAlerts = True

 Application.ScreenUpdating = True  '// 画面更新を再開
End Sub
お礼コメント
nyaaaaaaaao

お礼率 100% (3/3)

ご回答ありがとうございます。

上記コードで動作確認できました。
投稿日時:2019/10/02 15:29
この回答にこう思った!同じようなことあった!感想や体験を書こう!
この回答にはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
  • エクセルVBA セルを参照した文字検索 オフィス系ソフト

    どなたか教えてください。 ブックAのシート1の“A1”の値が、ブックBのシート1のA列に完全一致であるかどうかを検索し、あればそのセルをアクティブ、なければメッセージを返すという処理をVBAで行いたいです。 Findメソッドを使うのかなというのは、なんとなくわかるのですが、検索値が毎回異なり直接検索値をコードに記入できないこと、異なるブックで検索することなどにより、コードの記載方法がわかりません。 どなたか、わかる方お教えください。...

  • エクセルVBAで、任意指定のファイル名を取得する方法を オフィス系ソフト

    教えて下さい。 ファイル(エクセルブック)を数個開いています。そのうち基本となるファイル(便宜上基本ファイルとします)は常に開いていて、後の数個の作業ファイルを開きます。(作業ファイルはその都度入れ替わり固定のファイルではありません)  基本ファイルを、アクティブな状態でエクセルVBAマクロを走らせます。 そのマクロ実行中に、『ある作業ファイルの任意のセル(任意のセル)をクリックして、そのファイル名とシート名とセルのアドレスとそのセルの値を取得』して、基本ファイルの任意のセル(例えば基本ファイルのsheet1のセルA2~D2に)に記入したいのです。 分かりにくい文で申し訳ないですが、特に上の『 』内の部分です。 どのようにマクロを記述すればいいのか分からないので、教えて下さい。宜しくお願いします。...

  • エクセルVBA ブックのクローズの記入の仕方 オフィス系ソフト

    エクセル2002を使用している初心者です。 エクセルを閉じる操作をしたときに、指定シートのあるセルをクリアして、 また別のシートについても、そのシート内のあるセルの文字を指定のセルにコピーしたいのです。(コピー先はセルの色を塗りつぶしたり、大きいフォントを使用しているので、その書式は変更せず、文字データだけをコピーしたいのです) このVBAの書き方を教えていただけないでしょうか。 VBAは書き込む場所はThisWorkbookですよね。 VBAの種類は、Private Sub Workbook_BeforeClose(Cancel As Boolean) End Sub ですよね。 すみません。この中に入れるコードがわからないのです。 クリアにするセルは、 シート名 利用券 の F15,F16,F17,Y16,AO16,AX16 です。 コピーするセルは、 シート名 施設 の セルG6 を セルC3 にコピーしたいのです。 (セルC3は、セルの色を塗りつぶしてあり、フォントも大きめを指定してあるので、その書式を活かしたままにしたいのです。また、セルC3は入力規則を設定していて、文字入力はできないようになっています。コピーはできましたけど・・・) いろいろ述べてすみません。 どうか教えてください。よろしくお願いいたします。...

  • エクセルVBAで違うブックの指定セルの値をコピーするコード オフィス系ソフト

    同じフォルダ内に次のブックがあります。 ・「日報」フォルダ ・「入力」ブック ・「日報」ブック 「日報」ブックの「入力」シートのセルに入力して、ボタンを押すと 「日報」ブックの指定のセルに順にコピーしていくようにしたいの ですが、コードをお教えいただけないでしょうか? 具体的には次のようになります。 「入力」ブックの「入力」シート→「日報」ブックの「日報」シート A2,C2,D2,E2,F2→→→→→→A5,D5,F5,L5,P5 A3,C3,D3,E3,F3→→→→→→A6,D6,F6,L6,P6 A12,C12,D12,E12→→→→→→A34,J34,E34,E35 A13,C13,D13,E13→→→→→→A36,J36,E36,E37 このように入力されるようにしたいと思います。 実際にはもう少し同じようにコピーするところが あるので、後でセル番地を追加できるようなコード であれば非常にありがたいです。コードを教えて ほしいなんて本当にずうずうしいですが、どうぞ よろしくお願いします。...

  • エクセルVBAで複数のブックから指定のシートを別のブックに複写するには その他MS Office製品

    エクセルVBAの超初心者です。 複数のフォルダに「●●社計算書(2010年3月).xls」・・・()内の年月は毎月増えます。格納されているフォルダは各会社名です。 というブックがあります。その各ブック内の売上というシートにある商品コードと売上金額を別の集計用ブックで集計したいと思っています。 どのように集計用ブックにコードを書いたらよいのでしょうか? 1 商品コードは各社共通です。 2 ブック名は共通ですがブック内のフォーマットは共通していません。(シート名は共通) 3 集計するのは集計時の年月度のデータです。 要領を得ず、ぶしつけな質問かと思いますが、大変困っています。 どなたかお分かりになる方、ご教授願います。 ...

ページ先頭へ