エクセルで複数行セルの参照

目的

4桁の数字で生徒名を表示させるのを、セル内改行で複数指定したものでも生徒名を羅列する関数マクロです。

下準備

氏名データのワークシートを用意します。

マクロを書く

Function SeitoName(ByVal nums As String) As String
 
Dim result As String                                    '変数を定義
Dim num As String
Dim Lfcount As Integer
Dim i, g, c, n As Integer
 
Lfcount = 0                                             'セル内改行をカウント
For i = 1 To Len(nums)                                  '繰り返し処理
  If Mid(nums, i, 1) = vbLf Then Lfcount = Lfcount + 1  '改行だったらインクリメント
Next
 
result = ""
 
For i = 0 To Lfcount                                    '繰り返し処理
  If i > 0 Then result = result & vbLf                  '2行目以降はセル内改行を付加
  num = Split(nums, vbLf)(i)                            '指定した1行抜き出す
  g = Int(Mid(num, 1, 1))                               '4桁数字のうち1文字目は「学年」
  c = Int(Mid(num, 2, 1))                               '2文字目は「組」
  n = Int(Right(num, 2))                                '3、4文字目は「出席番号」
  result = result & WorksheetFunction.Index(Worksheets(g & "年").Range("B2:K61"), n, c)
Next
 
SeitoName = result                                      '連結した氏名を吐き出す
 
End Function