![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
VLOOKUPで行き詰まったので、教えてください。
下記のような会社の様々な種類の電話データがあります。
A列:社員番号
B列:氏名
C列:電話の種類(外線・内線・携帯)(例:携帯)
D列:C列の種別が混雑した電話番号(例:070-1234-5678)
※各行のC列とD列は種別が合致している。
これを下記のようにVLOOKUP等で別シートに種別ごとに並べ替え、社員番号別電話番号一覧を作成したいです。
A列:社員番号
B列:氏名
C列:携帯番号
D列:内線
E列:外線
C列で種別にフィルタをかけて別シートにコピペしてVLOOKUPをかければ希望通りのデータが取得出来ますが、なるべく元データを加工せず取得出来るような関数にしたいです。
何かVLOOKUPにひと手間かけるのかもしれませんが、一歩及びません。
どうぞよろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?c9bd177)
No.3
- 回答日時:
以下のマクロを登録し、実行してください。
(標準モジュールへ登録)社員番号別電話番号一覧のシート名は、sheet2でつくっています。
必要であれば、適宜、名前を変えてください。
-----------------------------------------------
Option Explicit
Public Sub Macro()
Dim Sh1, Sh2 As Worksheet
Dim MaxRow As Long ' 最終行
Dim key As String ' 検索キー
Dim row1 As Long 'sheet1の行番号
Dim row2 As Long 'sheet2の行番号
Dim row As Long '行番号(sheet2一時作業用)
Dim dicT As Object '連想配列
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
Set Sh1 = Worksheets("alldata") ' 元の電話番号一覧
Set Sh2 = Worksheets("sheet2") ' 社員番号別電話番号一覧
Sh2.Cells(1, 1).Value = "社員番号"
Sh2.Cells(1, 2).Value = "氏名"
Sh2.Cells(1, 3).Value = "携帯"
Sh2.Cells(1, 4).Value = "内線"
Sh2.Cells(1, 5).Value = "外線"
row2 = 2
MaxRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).row ' 最終行を求める
' 元の電話番号一覧を読み込む
With Sh1
For row1 = 2 To MaxRow ' 最終行まで行う
key = .Cells(row1, 1).Value
If dicT.exists(key) = False Then
dicT(key) = row2
row = row2
row2 = row2 + 1
Sh2.Cells(row, 1).Value = .Cells(row1, 1).Value '社員番号
Sh2.Cells(row, 2).Value = .Cells(row1, 2).Value '氏名
Else
row = dicT(key)
End If
Select Case .Cells(row1, 3).Value
Case "携帯"
Sh2.Cells(row, 3).Value = .Cells(row1, 4).Value '携帯の電話番号
Case "内線"
Sh2.Cells(row, 4).Value = .Cells(row1, 4).Value '内線の電話番号
Case "外線"
Sh2.Cells(row, 5).Value = .Cells(row1, 4).Value '外線の電話番号
End Select
Next
End With
End Sub
------------------------------------------------------
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?c9bd177)
No.2
- 回答日時:
マクロで作成しても良いならそのマクロ提供することは可能です。
会社の様々な種類の電話データのシート名は何でしょうか?
社員番号別電話番号一覧のシート名は何でしょうか?
一回のマクロの呼び出しで、会社の様々な種類の電話データのシートを基に、
社員番号別電話番号一覧のシートを一気に作成します。
従って、会社の様々な種類の電話データのシートの一部を修正した場合は、
その都度、あなたがマクロを実行する必要がありますが、それでも良いならマクロを提供します。
ありがとうございます。
マクロでも問題ありません。
シート名はalldataです。
シートは番号に変動がある度に更新する必要があります。
どうぞよろしくお願いいたします。
No.1
- 回答日時:
無理。
むしろMATCH関数とINDEX関数の組み合わせで拾ってきたほうが良いと思います。
1行の中に、
「携帯番号」(あるいは「携帯」)と書かれたセルが何列目にあるのかMATCH関数で調べて、
INDEX関数で次の列にある値を拾ってくる。
のような手順のほうが簡単だろうと思います。
=MATCH(”携帯”,A1:D1)
これで1行目に「携帯」と書かれたセルが、A1セルからD1セルの中の何番目にあるかが分かります。
=INDEX(A1:D1,MATCH(”携帯”,A1:D1)+1,0)
これで”携帯”と書かれた次の列の値を参照できます。
・・・
エラーに関する処理は行っていませんので、「携帯」と書かれたセルが無い場合はエラーになります。
エラーになったら空白を表示するような処理を別途行ってください。
IF関数とISERROR関数の組み合わせ、
または、IFERROR関数(Excel2007から追加された関数)
で処理できると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) Excelで質問です! 現在マクロを勉強中の初心者です。 以下のような表から、会社名が空白のもの以外 2 2022/06/14 12:16
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelのマクロでrangeの選択が...
-
エクセルでの特別な文字を上に...
-
EXCELで2つの数値のうち大きい...
-
エクセルで二つの数字の小さい...
-
Excelで隣のセルと同じ内容に列...
-
50人を数回、グループ分けする...
-
エクセルのまとめてカッコをつ...
-
お店に入るために行列に並んで...
-
PowerPointで表の1つの列だけ...
-
エクセルでB列でフィルターをか...
-
エクセル(勝手に太字になる)
-
Excel、市から登録している住所...
-
Excel関数で、範囲内の最後のセ...
-
えエクセルで○は1とし△は0.5で...
-
SUMIFとCOUNTIFを合わせたよう...
-
ある列のセルに特定の文字が入...
-
エクセルの関数(日数の平均の...
-
エクセル 文字数 多い順 並...
-
Excelで、A列にある文字がB列...
-
エクセルで指定期間内に在職す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
エクセル 1つのセル毎に入力...
-
Excel VBA For Each Next構文...
-
Excel VBAのComboboxのRemoveItem
-
Excel2000 VBA ダブルクリック...
-
【Excel関数】商品コードと商品...
-
EXCEL(エクセル)で0.001以下...
-
ISERROR関数
-
Gメールの内容をスプレッドシ...
-
VLOOKUPのような操作ができるマ...
-
VBA重複チェック
-
エクセルのIF関数がうまくいき...
-
VLOOKUPで行き詰まったので、教...
-
エクセルの関数を連続コピー
-
エクセルで別シートにある各々...
-
EXCEL 行内のデータを2行に分け...
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
おすすめ情報