アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは

VBA初心者です。

マクロでこんなことできませんか?
完全でなくても構いませんので、できる範囲で教えてください。
宜しくお願いいたします。

マクロを起動すると、ファイルを選択するウインドウが開きます。ここで、あるExcelファイル(仮にC:\MYDOCUMENT\EXCEL\AAAA.xls)を選択すると、
このファイルの列D5、行A7から始まる氏名一覧が、マクロを実行しているファイル(BBBB.xls)の列A、行A9セルに1行ずつ、名前を検索して、その名前と同じ人の行に入れる仕様です。

宜しくお願いいたします。

A 回答 (1件)

投稿する前に質問文を読み返すことをお勧めします。

(タイトルも含めて)

> このファイルの列D5、行A7から始まる氏名一覧が
「このファイルの D列 7行目から下に向かって入力されている氏名一覧が」 ということでしょうか?

「ファイルを選ぶ」「ファイルを開く」「氏名一覧を取得する」を GetNameList という一つの関数にまとめてみました。
名前の一覧を二次元配列で返します。
配列のインデックスは 1 から始まります。

あくまでも動作を説明するコードなので、AAAA.xls から取得した氏名一覧を AAAA.xls のシートに書き出しています。
書き出す処理の代わりに、質問者が行いたい「名前を検索して・・・」のコードを考えればよいと思います。

Sub hoge()
 Dim nameList As Variant ' 取得した氏名一覧の配列
 nameList = GetNameList()

 If Not IsArray(nameList) Then
  Exit Sub
 End If

 Dim thisSheet As Worksheet
 Set thisSheet = ThisWorkbook.Worksheets(1) ' BBBB.xls の左から 1枚目のシートに書き出します。

 ' 取得した氏名の一覧をセルに書き出す
 Dim i As Long
 For i = 1 To UBound(nameList)
  thisSheet.Cells(i, 1).Value = nameList(i, 1)
 Next
End Sub

Function GetNameList() As Variant
 ' 対象ファイルを選択し、そのファイルパスを取得する
 Dim fileToOpen As Variant ' 選択するファイルのパス
 fileToOpen = Application.GetOpenFilename("Excel ファイル,*.xls")
 If fileToOpen = False Then
  GetNameList = ""
  Exit Function
 End If

 ' 選択したファイルを開く
 Dim listBook As Workbook, listSheet As Worksheet
 Set listBook = Workbooks.Open(fileToOpen)
 Set listSheet = listBook.Worksheets(1) ' AAAA.xls の左から 1枚目のシートに氏名一覧があると仮定しています。

 ' 開いたファイルに記載されている氏名一覧の範囲を取得する
 Dim listColumn As Long, listRowStart As Long, listRowEnd As Long
 listColumn = 4 ' D列
 listRowStart = 7 ' 7列目から
 listRowEnd = listSheet.Cells(7, 4).End(xlDown).Row

 ' 氏名一覧のデータを取得する
 GetNameList = listSheet.Range(listSheet.Cells(listRowStart, listColumn), listSheet.Cells(listRowEnd, listColumn)).Value

 ' ファイルを閉じ、氏名一覧のデータを返す
 listBook.Close False
End Function
    • good
    • 0
この回答へのお礼

解決しました

x-1919さん

ご回答いただき、本当にありがとうございます。
すごく助かりました。
ご丁寧にありがとうございました。
外国人なので、日本語の書き方がちょっとわかりにくかったですね。。

お礼日時:2017/06/21 15:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!