• ベストアンサー

エクセルでのデータ抽出について

エクセルでのデータ抽出について質問です。 現在、エクセルで以下のようなシートがあります。 *アルファベットと数字はエクセルシートの座標です。データではないです。 _|__A___|__B___|__C___|__D__|  1|_太郎_|_次郎_|_三郎_| 2|__@___|__@___|__ ___| 3|__@___|__@___|__ ___| 4|__@___|__ ___|__@___| 5|__@___|__ ___|__@___| 上記のように1行目には人の名前が入っていて、二行目以降には@が入っているシートです。 現在、私のやりたいことはDセルの2~5行目までに何かしら数式を入れて、シートを行で見たときに@が入っている人の名前をDセルに表示をさせたいです。 具体的に言うと、D2には『太郎・次郎』、D5には『太郎・三郎』といった具合です。 どなたかこの処理が簡単にできる関数や方法をご存知の方はいらっしゃいませんでしょうか? 実際にはデータシートが1000行ほどあって手打ちだとなかなか骨が折れる仕事です。。。 どなたかご助言お願いいたします。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

VBAは判らんかも知れないが、今回だけ使う、ということで下記をやってみたら。(エクセル関数だってユーザーは内部でエクセルがどう何をやってるか知らないで使っているのだ) 普通の関数感覚で使えて、コード行数が少なくて実現するのでお勧めする。 下記はユーザー関数というものです。 IF文でやると列数が増えると式が長くなってダサい。 例データ A1:E4 E列は結果 -は空白の代わり。aは氏名の代わり。 a b c d - @ @ - b・c @ - - - a @ - @ @ a・c・d ーー メニューでツールーマクローVisualBasicEditorをクリック メニューで挿入ー標準モジュール そのVBEの標準モジュールの画面に下記をコピペ Function ketu(a) Dim cl As Range s = "" For Each cl In a If cl = "@" Then s = s & "・" & Cells(1, cl.Column) Next ketu = Right(s, Len(s) - 1) End Function ーーー E2に =ketu(A2:D2) と入れて式を縦方向に複写。 列が4列より多いときは、=ketu(A2:K2)のように変えるだけ。 VBAコードは変更なし。

kotakota1010
質問者

お礼

ご察しの通りVBAは全然知りませんでしたが、言われたとおりにやったら簡単に出来てちょっと感動しました。 ありがとうございました。

その他の回答 (4)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

一例です。 D2に=SUBSTITUTE(TRIM(IF(A2="@",$A$1&" ","")&IF(B2="@",$B$1&" ","")&IF(C2="@",$C$1&" ",""))," ","・")を入力して下方向にコピー

kotakota1010
質問者

お礼

ご回答ありがとうございます。 SUBSTITUTE関数は初めて知りました。ありがとうございました

noname#204879
noname#204879
回答No.3

  A   B   C      D     E F G H I  J   K   L 1 太郎 次郎 三郎           1 2 3 2 @   @      太郎・次郎     0 1 2      太郎 次郎 3 @   @      太郎・次郎     0 1 2      太郎 次郎 4 @      @   太郎・三郎     0 1 3      太郎 三郎 5 @      @   太郎・三郎     0 1 3      太郎 三郎 6 @   @   @   太郎・次郎・三郎  1 2 3   太郎 次郎 三郎 7    @      次郎        0 0 2         次郎 F2: {=SMALL(($A2:$C2="@")*COLUMN($A2:$C2),F$1)} J2: =IF(F2,INDEX($A$1:$C$1,,F2),"") D2: =SUBSTITUTE(TRIM(J2&" "&K2&" "&L2)," ","・")

kotakota1010
質問者

お礼

ご回答ありがとうございます。 いろいろ見たことがない関数を使っていて面白そうです。 さっそく試してみたいと思います。

  • wisemac21
  • ベストアンサー率39% (171/429)
回答No.2

=IF(COUNTIF(A2,"*@*")=1,$A$1,"")&IF(COUNTIF(B2,"*@*")=1,"・"&$B$1,"")&IF(COUNTIF(C2,"*@*")=1,"・"&$C$1,"")

kotakota1010
質問者

お礼

ご回答ありがとうございます。 試してみたいと思います。

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.1

C2に以下の式を入力し、全ての行にコピーします。 =TRIM(IF(A2="@","太郎","") & " " & IF(B2="@","次郎","") & " " &IF(C2="@","三郎","")) IF関数で@があれば名前を表示するという式を3人分結合します。 間の" "は結果を見やすくするためでTRIM関数は余分な空白を除去するものです。

kotakota1010
質問者

お礼

ご回答ありがとうございます。 TRIMという関数を初めて知りました。 さっそく試してみたいと思います

関連するQ&A