• ベストアンサー

エクセルのデータ抽出と隣の列への統合?

いつもお世話になります。 いきなり分かりづらいタイトルで申し訳ありません。 エクセルの関数(だと思いますが)を教えてください。 たとえば A-1のセルに「1,4,6,8」 B-1のセルに「1,8,10」 という半角数字+半角カンマが入力されています。 A-1の「6」を抜き出し、 (抜き出すのでA-1は「1,4,8」となる) B-1に「1,8,10,6」 とくつけるのにはどうしたらいいでしょうか? ちなみにB-1内の数字は数字の大きい順に ならなくてもかまいません。 このような数値が数百行ありますので、 関数で一揆にできる方法を探しています。 関数初心者でわかりにくい説明かと思いますが よろしくお願いいたします。

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

  • ベストアンサー
回答No.3

#1です。 A-1からある特定の数字(例の場合は6)を見つけて削除し、B-1に繋げればよろしいでしょうか。 C-1に =SUBSTITUTE(SUBSTITUTE(A1, "6,", ""), ",6", "") D-1に =IF(ISERR(FIND("6", A1)), B1, B1 & ",6") と入力すれば結果が得られると思いますので、2行目以下にコピーしてください。 A列、B列に結果を戻したいときは、C列、D列に値貼り付けでコピーしてください。 数式で、目的の数字6を容易に変更したいなら、例えばI-6に6と入力して、数式を次の様にすれば可能です。 C-1 =SUBSTITUTE(SUBSTITUTE(A1, $I$1 &",", ""), "," & $I$1, "") D-1 =IF(ISERR(FIND($I$1, A1)), B1, B1 & "," & $I$1) もし7を目的の数字にする場合は、I-6の値を7に変更するだけですみます。

その他の回答 (5)

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.6

すいません。一箇所訂正があります。 '文字がないとき fDelChar = fDelChar = "" これは、 '文字がないとき fDelChar = "" の間違いでした。すいません(>_<)

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.5

・対象値が先頭にある場合、「6,1,4,8」→「1,4,8」 ・対象値だけしかない場合、「6」→「」 ・対象値がない場合、「1,4,8」→「1,4,8」 ・2桁の入力がある場合、「16,4,8」→「16,4,8」 このように、色々なケースが考えられるため、通常の関数の組み合わせだけでは条件分岐が複雑になりそうなので、ユーザ関数を作ってみました。 ツール→マクロ→VisualBasicEditor 挿入→標準モジュール 右の白い部分に以下のコードをコピーして貼り付けてください。 Function fDelChar(c As Variant, s As Variant) As String '元の文字列から取り除く文字列を作成 If IsNull(c) Or IsNull(s) Then '文字がないとき fDelChar = fDelChar = "" ElseIf c = s Then '単独のとき fDelChar = Format(c, "0") Else '前後にカンマを付加して検索 Select Case InStr("," & s & ",", "," & c & ",") 'ないとき Case 0: fDelChar = "" '先頭のとき Case 1: fDelChar = Format(c, "0") & "," '中間か最後のとき Case Else: fDelChar = "," & Format(c, "0") End Select End If End Function EXCELシートに戻ってください。 1行目に項目名をつけます(つけなくても構いません)。 A1=「元」 B1=「先」 C1=「対象値」 D1=「元変換後」 E1=「先変換後」 A2=「1,4,6,8」 B2=「1,8,10」 C2=「6」 D2=「=SUBSTITUTE(A2,fdelchar(C2,A2),"")」 E2=「=B2 & IF(EXACT(A2,D2),"","," & C2)」 これでD2とE2に求めたい結果が出ていると思います。 D2とE2を下方にコピーしてください。 全行で対象値が同じ場合はC2も下方へコピーしてください。 各行で対象値が違う場合は、C列には手入力してください。 頑張ってくださいヽ(^。^)ノ

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

#2です。6が「その他」らしいので、設問によっては、別数字になると睨んで、 A1に1,4,6,8 A2に1,8,10 B1に6として C1に=SUBSTITUTE(A1,B1&",","")で1,4,8 C2に=A2&","&B1で1,8,10,6 (興味があれば)セルの中を番号の昇順にする場合は下記ユーザー関数を作る。 標準モジュールに Function srt(a) s = Split(a, ",") For i = 0 To UBound(s) For j = i To UBound(s) If Val(s(i)) > Val(s(j)) Then w = s(i) s(i) = s(j) s(j) = w End If Next j Next i t = "" For i = 0 To UBound(s) t = t & s(i) & "," Next srt = Left(t, Len(t) - 1) End Function C2に1,8,10,6があるとしてD2に=SRT(C2)で 1,6,8,10になる。

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

>A-1の「6」を抜き出し、 6はなぜ、抜き出し対象になるのですか (例) (1)6と言う値だから (2)最初から3番目だから (3)最後から2番目だから (4)最初の6の倍数だから (5)その他の理由 (6)どこかのセルに入っている値が6である。   7が入ることもある。 B1は、 (1)最後に、カンマを付けて追加 (2)その他のルール

ozon_ozon
質問者

補足

すいません♯1で細くいたしましたが、 ご丁寧な質問に感謝いたします!(わかりやすいですね) A1の答えは(1)です。 B2の答えは(1)です。 数字と数字の間には半角カンマが必要です。 よろしくお願いいたします。

回答No.1

「A-1の『6』を抜き出し」 は、どのような基準で抜き出すのでしょうか? また、 「B-1に『1,8,10,6』 とくつけるのにはどうしたらいいでしょうか」 は、後ろに繋げれば宜しいのでしょうか?

ozon_ozon
質問者

補足

早速のお返事ありがとうございます。 「6」の抜き出しの基準ということですが、 すみませんご質問の意図がなにぶん素人で理解できないのですが、今のところ基準は決まっていませんが、 これからデータを整理しながら検討しなくてはいけません。 実際のデータも同じような数字が入力されており、例として「6」をあげましたが、1,4,8を隣の列に統合させるケースもありえます。 ただし、隣にも同じ数字がある場合、数字の重複は避けたいため(つまり同じセル内に同じ数値が2つある)、任意の番号たとえば「99」などを与えて一度置換させてから、統合させたいと思っています。 2つめのご質問ですが後ろにつなげられればOKです。 アンケートの集計をしており、 数字の意味はアンケート結果の言葉です。 たとえば1は遠い、4は近い、6はわからない などです。その「6のわからない」という回答を 隣の列に統合させたいという作業をしています。 わかりづらい説明とは思いますが、 よろしくお願いいたします。

関連するQ&A