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

②見出しピンクのシートを参照して、①青の見出しのシートのF列に建物のよみがな(②のF2)を入れたいです。
VBAでどのように書けばよいしょうか。VBAと普通の関数での入力方法、両方とも教えていただけるとありがたいです。

条件は以下の通りです。
②の列は動く(位置が変わる、列数が増える可能性有)
②B列種別”共通”レコードのみに住所や読み仮名の情報が入っている。種別が異なる情報はGPIDで紐づいている。
①はこのまま客先に提出するため見出し含めフォーマットの変更不可

「Excel VBA 少し複雑な構造データ」の質問画像

質問者からの補足コメント

  • 画像追加します!

    「Excel VBA 少し複雑な構造データ」の補足画像1
      補足日時:2022/03/11 23:08
  • 青のシートは、他のシートからも情報を引っ張ってきています。
    条件がなさすぎるかもしれませんが、とりあえずピンクのシートから田中団地が入ってくるとお考えいただけますでしょうか?

      補足日時:2022/03/11 23:24

A 回答 (6件)

Option Explicit


Sub Sample()
Dim Sh桃 As Worksheet
Set Sh桃 = Workbooks("桃ブック").Worksheets("桃シート")
Dim Col種別 As Long
Col種別 = Sh桃.Rows(1).Find("種別", LookIn:=xlValues, LookAt:=xlWhole).Column
Dim Col建物 As Long
Col建物 = Sh桃.Rows(1).Find("建物名", LookIn:=xlValues, LookAt:=xlWhole).Column
Dim Colかな As Long
Colかな = Sh桃.Rows(1).Find("建物かな", LookIn:=xlValues, LookAt:=xlWhole).Column
Dim r桃Max As Long
r桃Max = Sh桃.Cells(Sh桃.Rows.Count, Col種別).End(xlUp).Row
Dim Sh青 As Worksheet
Set Sh青 = Workbooks("青ブック").Worksheets("青シート")
Dim Row青 As Long
For Row青 = 2 To Sh青.Cells(Sh青.Rows.Count, "E").End(xlUp).Row
Dim 建物名 As String
建物名 = Sh青.Cells(Row青, "E").Value
Dim Row桃 As Long
For Row桃 = 2 To r桃Max
If Sh桃.Cells(Row桃, Col種別).Value = "共通" Then
If Sh桃.Cells(Row桃, Col建物).Value = 建物名 Then
Sh青.Cells(Row青, "F").Value = Sh桃.Cells(Row桃, Colかな).Value
Exit For
End If
End If
Next Row桃
Next Row青
End Sub
    • good
    • 3
この回答へのお礼

ありがとう

ありがとうございます!参考にさせて頂きます!!(とても勉強になります)

お礼日時:2022/03/12 15:42

>①はこのまま客先に提出するため見出し含めフォーマットの変更不可



提出方法にちょっと気になる点が。
Excelブックで提出したら数式が崩れるから、紙に印刷なりPDFファイル等で提出なのかな?

それなら①にVBAを仕込んで②がどのように(ブックがね)変化しても仮にシート数が1つで名前に変更がなければ、フィールド名『建物かな』で空白ではない場合に『建物名』と対になるデータを抜き出しておく。
あとは①の『建物名』の列は変更ないって事なので『よみがな』として書き加えれば良いのかな?

でも今回の例題が『田中団地』のみであるけど②のシートでは『建物名』は1つしかないの?って部分が気になりました。
回答も出ているので多分私の心配性なだけかも(読解力不足)とも思えますから、スル~されて構いません。
    • good
    • 1
この回答へのお礼

ありがとうございます!

お礼日時:2022/03/13 02:33

>ブック名はそれぞれ①と②という形で大丈夫です。


>青のブックは開かれますがピンクは閉じています。

ブック名は①.xlsm、②.xlsxと理解しました。
②.xlsxをオープンするには、それがどこのフォルダに格納されているのかを
指定する必要があります。
①.xlsmと同じフォルダでしょうか。その場合は、格納フォルダ名を意識する必要はありません。
①.xlsmと異なるフォルダなら、マクロ内で明示的にそのフォルダを指定してオープンします。(こちらでテストしたフォルダ名になるので、あなたの環境のフォルダ名にあとであなたが修正する必要があります)
    • good
    • 1
この回答へのお礼

お手数をお掛けして申し訳ありません。色々とありがとうございます。
今回、よみがなの引っ張り方を伺いたかっただけですので、その他情報諸々記載しておらず申し訳ありません。

お礼日時:2022/03/13 02:37

こんにちは。



項目のタイトルには○○IDとかがあるのに、建物は名称で検索しなければならないというのは何かがおかしい。
管理体系を見直された方が良さそうに思います。
そうすれば、ご質問のようなことも必要なくなるのではないかと推測します。


ブックの関係やシートの名称などが曖昧なので、勝手に想定しました。
・同一ブック内にあるものとし、「②見出しピンクのシート」の名称をSheet1とします。

◇関数の場合
「①青の見出しのシート」のF2セルに
=IFERROR(INDEX(Sheet1!F:F,AGGREGATE(15,6,ROW(B$2:B$99)/(Sheet1!B$2:B$99="共通")/(Sheet1!D$2:D$99=E2),1)),"")
の式を入力し、下方に適当なところまでフィルコピー。

◇マクロの場合
すでに回答が出ているようなので省略。
別法として、「マクロの記録」を利用して
 ・上記を操作
 ・F列を「コピー」-「値をペースト」(←必要なければ不要)
の操作を要領よく行えば、数行のマクロで可能になるものと想像します。


※ 画像の添付がどうしてもできないようになってしまったので、文章のみで失礼。
    • good
    • 1
この回答へのお礼

ありがとうございます!質問に書いた通り建物はIDで紐づいています。indexを使うんですね。どうもありがとうございます。動かしてみたいと思います!

お礼日時:2022/03/12 15:40

No2の方のマクロをみると


①青シートと②ピンクシートは、別々のブックとして扱っています。
①青シートと②ピンクシートは、同じブック内にあるのでしょうか。
それとも、別々のブックなのでしょうか。
もし、別々のブックだとしたら、
各々のブック名は何でしょうか。
又、どちらのブックもオープンされているという前提で良いのでしょうか。
それとも、②ピンクのブックは閉じているのでしょうか。
(①青のブックはマクロのあるブックなので当然オープンされている前提です。)
    • good
    • 0
この回答へのお礼

ありがとうございます。
すみません説明不足でした。
実際には違うブックです。
ブック名はそれぞれ①と②という形で大丈夫です。青のブックは開かれますがピンクは閉じています。どうぞよろしくお願いいたします。

お礼日時:2022/03/12 15:38

マクロで対応する前提での補足要求です。


1.②ピンクのシートのシート名は何でしょうか。

2.①青色のシートのシート名は何でしょうか。

3.②の列は動くということですが、B列(種別)、D列(建物名)、F列(建物かな)
が動くこともありますか。これらの列が動くと、対応できないです。

4.①と②を紐づけるのは、建物名で良いですか。
①E列の田中団地に対応する②D列の田中団地(種別=共通)を検索し、
該当レコードのF列(建物かな)を取得します。
    • good
    • 1
この回答へのお礼

ありがとうございます!
1. ①は入力用
2. ②は参照です。
3. ②はシステムから落とすので他部署によって項目が挿入されたり削除されるので列名は固定されるものの列の順番や列数は固定できない状況です。。(他のシートに列抜き出す等でご対応は難しいでしょうか。。
4. 建物名で大丈夫です。

どうぞよろしくお願いいたします。

お礼日時:2022/03/12 07:50

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