別シートにある住所録のデータ内容を、別のシートの同一人物の列に自動で張り付けたい場合どのような数式を使えばいいでしょうか?
色々検索したのですが、上手くいくものがありませんでした。
sheet1
A B C D E F G
物件名 貸主名 郵便番号 住所1 住所2
sheet2
A B C D E
物件名 郵便番号 住所1 住所2 貸主名
◆シート1のA・BにはデータがありますがC・D・Eは空欄です。
F以降にはデータが入っています。
◆シート2のA・B・C・D・Eにはデータがあります。
<やりたい事>
シート1とシート2の入力順はバラバラで、シート1の郵便番号・住所1・住所2にシート2から
物件名もしくは貸主名で照合して自動で対象セルを張り付けたいのですが、VLOOKUPもしくは
マクロで一括してできるでしょうか?
よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
vba を使えばいろいろ手が考えられますが(ちなみにvbaを使う場合はセルごとに処理するのでなく、一旦配列に入れて処理しないと速度が桁違いに(下手すると2桁位は)遅くなります。
エクセルの関数でも出来そうですので(エクセルの組み込み関数は早い)ちょっと提案しましょう。
まず、シート2の貸主名のデータに重複がないとします。普通は重複があるといけないと思いますのでこの考えで問題ないと思います。
この貸主名の入力されている行が分かれば、その行の郵便番号や住所を拾ってくるだけですが、Vlookup関数は、検索するデータが範囲の先頭列に無ければいけないので今回のシート2の順番では使えません。
この場合は、match 関数で行で調べてindex関数で範囲のその行の希望の列を拾ってくれば良いです。
実際はひとつの式にまとめても良いですが、考え方を示すために別々の式で示します
sheet2のデータ範囲を仮にA2:E1000 とします。(1行目はタイトルですね)
sheet1の方は1行目がタイトルで2行目からデータが始まっているとします。
仮にH列に貸主のデータが入っている行を調べるmatch関数を入れることにします
H2のセルの式
=match(B2,sheet2!$E$2:$E$1000,0)
3番目の引数を0にしないと、sheet2の方は貸主名でソートしないといけなくなります
これでH2に貸主名の行が出てくるので(範囲が2行目からなので行数としては実際の行数より1少ない値です)idex関数で必要な値を引っ張ってくるだけです。
郵便番号の C2セルには
=index(sheet2!$A$2:$ES$1000,$H2,2)
検索の範囲は、絶対参照ですが、行の値のセルへの参照はコピーする都合で列のHだけ絶対参照にしておきます。
これを住所1、住所2にコピーすると、3番目の引数の列の値が郵便番号の2のままですから、3と4に直せばOKです。
範囲指定の方法はもっと範囲を絞っても構いませんが(3番目の引数も直す)内部では配列で処理しているので範囲が広くても実行速度はほとんど変わらないようです。
慣れないうちはmatch関数の列を別にに設けた方が分かり易いですが、これをIndex関数に組込めばmatch列は不要になります。
たとえば
=Index(sheet2!$A$2:$ES$1000,Match(B2,sheet2!$E$2:$E$1000,0),2)
範囲の指定は名前と言う機能を使いと可読性は上がりますが、範囲を広げる時は名前の管理で行うなど、ちょっと別のセンスが必要となります。
matchで拾ってくるのですね。
VLOOKUPしか浮かばなかったので、目から鱗です。
色々な拾い方ができますね。とても参考になりました。
他の帳票でも使えそうです!
ありがとうございました。
No.4
- 回答日時:
すいません、「元行」と「先行」が入れ違っていた所が有りました。
以下の様に修正してください。Sub Sample()
Dim 元行 As Long
Dim 先行 As Long
Sheets("Sheet1").Select
For 先行 = 1 To Cells(Rows.Count, 1).End(xlUp).Row
For 元行 = 1 To Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
If Cells(先行, 1).Value = Sheets("Sheet2").Cells(元行, 1).Value Then
If Cells(先行, 2).Value = Sheets("Sheet2").Cells(元行, 5).Value Then
Cells(先行, 3).Value = Sheets("Sheet2").Cells(元行, 2).Value
Cells(先行, 4).Value = Sheets("Sheet2").Cells(元行, 3).Value
Cells(先行, 5).Value = Sheets("Sheet2").Cells(元行, 4).Value
End If
End If
Next
Next
End Sub
No.3
- 回答日時:
「Cells(Rows.Count, 1).End(xlUp).Row」は1列目(A列)の最後の行番号になります。
たとえば E列(5列目) の場合は「Cells(Rows.Count, 5).End(xlUp).Row」になります。
後は判ると思いますので説明は省きますが、質問いただければ説明します。
No.2
- 回答日時:
とりあえず、かんたんな「For … Next」を使ったもの
Sub Sample()
Dim 元行 As Long
Dim 先行 As Long
Sheets("Sheet1").Select
For 先行 = 1 To Cells(Rows.Count, 1).End(xlUp).Row
For 元行 = 1 To Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
If Cells(元行, 1).Value = Sheets("Sheet2").Cells(先行, 1).Value Then
If Cells(元行, 2).Value = Sheets("Sheet2").Cells(先行, 5).Value Then
Cells(元行, 3).Value = Sheets("Sheet2").Cells(先行, 2).Value
Cells(元行, 4).Value = Sheets("Sheet2").Cells(先行, 3).Value
Cells(元行, 5).Value = Sheets("Sheet2").Cells(先行, 4).Value
End If
End If
Next
Next
End Sub
No.1
- 回答日時:
「物件名もしくは貸主名」で良いのですか?「物件名」は重複は無いと思いますが「貸主名」は重複がありそうです。
両方が一致したものとした方が良いのでは?ちなみに、郵便番号、住所1、住所2が、貸主様の物ならば問題はありませんが!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクスプローラーで見ることは...
-
【マクロ】表における同じお客...
-
Excelで、すでに書いてある表を...
-
Excelのマクロが表示できない
-
エクセルの数式について教えて...
-
Excelのsumifで検索する範囲を...
-
エクセルの条件付き書式設定に...
-
エクセル 同じ行の隣り合う数字...
-
エクセルの数式について教えて...
-
エクセルの『共有作業』につい...
-
Excel 日付の表示が直せません...
-
エクセル 数字のみ抽出につて
-
Excel 関数での質問です
-
【関数】2つの条件を満たす、...
-
Vba 印刷設定のみ行うダイヤロ...
-
パソコンのエクセルの操作につ...
-
エクセルでA1を参照してその文...
-
MacのExcelで、ショートカットC...
-
Excelファイルが開けません
-
Excelの関数で質問です
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで、数字ではない値(...
-
Excel いい方法教えてください。
-
納期順に勝手に並べ替えられる...
-
エクセルで作成した書類の印刷...
-
Excel初心者です、Excelの日付...
-
エクセルで作った表が印刷する...
-
実務の処理について。
-
AM8:30から翌朝8:30まで勤務す...
-
Excelのデータの入力規則の問題...
-
Excelの罫線を消す方法
-
桁をセルで区切って計算をした...
-
スプレッドシート(Excelでも良...
-
VLOOKUP関数で複数条件を設定に...
-
Excel初心者です。 Excelでやり...
-
エクセルでAのセルに「家電」と...
-
ファイルとフォルダの移動につ...
-
XMLHTTP60で前日のデータが取れ...
-
ファイルパスについて。
-
エクセルの数式について教えて...
-
スプレッドシートで適切な条件...
おすすめ情報
ありがとうございます。
出来れば物件名と貸主名両方が一致した方が誤りがないと思うのでそれで出来ればベストです。
これは表の一部でまだ物件住所も物件の郵便番号も同じよう入力したいと思っています。
今後表の変更がありそうなので今回教えて頂いたものを基本に作ろうと思っています。