- ベストアンサー
エクセル セルを参照し同じ内容を複写できずに困っています
これができると楽になるため、よろしくお願いします。 現状のセル情報が以下の場合。 A B C 1 あいう 日本 2 あいう 3 かきく JAPAN 4 かきく 5 かきく 6 さしす ニホン 7 さしす 8 さしす 9 さしす B列を参照して入力(例ではB1に”日本”)があるときは、A1を参照する。 A1のセル内容(例では”あいう”)を参照し、A2:A9のセル内容がA1のセル内容と一致する場合は、B2にB1と同じ内容(例では"日本”)を入力するためにはどのよにすればいいでしょうか。 ※C列も同様です。 A1:C9での範囲を指定してでできればベストですが、B列、C列ごとにでもできればうれしいです。 いい方法はないでしょうか。 結果として、以下のとおりなることを望んでいます。 A B C 1 あいう 日本 2 あいう 日本 3 かきく JAPAN 4 かきく JAPAN 5 かきく JAPAN 6 さしす ニホン 7 さしす ニホン 8 さしす ニホン 9 さしす ニホン よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
もし関数で質問文通りのことを実現することを希望するなら「そのままではできません」が回答です。 理由はB列やC列に数式を入力する場合、その式はB列、C列の値(例えば「日本」)を参照する必要があるため、循環参照となってしまいエラーとなるからです。 ただしB列、C列に値を表示するのではなく、いったん作業列としてD列、E列に値を表示するなら関数式で可能です。D1セルに以下の式を貼り付けて、下方向と右方向にコピーしてください。すると質問文にあるような結果になります。 それをコピーして、B列、C列に「編集」→「形式を選択して貼り付け」→「値」で貼り付ければ、結果としては求めている状態にすることができます。 =IF(INDEX(B:B,MATCH($A1,$A:$A,0))="","",INDEX(B:B,MATCH($A1,$A:$A,0))) VBAを用いれば、作業列を用いることなく表の加工が可能です もしVBAが良ければ補足してください。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17070)
見つかった最初の行に「日本」などが見つかるらしい例なのであるが、日本が見つかる位置が変動し、列も変動するので、こういう種類の問題は、関数向きでなく、VBA向きの問題だ。 例データ あいう 日本 あいう かきく ーー JAPAN かきく かきく さしす ーー ーー ニホン さしす さしす さしす ーーは空白のつもり。左詰め表示防止用。 質問例に比べ、ニホンの列を1列ヅラして少し難しくしてある。 ーー コード Sub test01() d = Range("A65536").End(xlUp).Row For i = 1 To d If Application.WorksheetFunction.CountBlank(Range("B" & i & ":D" & i)) = 3 Then Cells(i, y) = x Else For j = 2 To 4 If Cells(i, j) <> "" Then x = Cells(i, j) y = j Exit For End If Next j End If Next i End Sub ーー 結果 あいう 日本 あいう 日本 かきく ーー JAPAN かきく ーー JAPAN かきく ーー JAPAN さしす ーー -- ニホン さしす ーー -- ニホン さしす ーー -- ニホン さしす ーー -- ニホン
お礼
ありがとうございます。 一度VBAにも挑戦してみます。 不明な点があれば、再度質問しますので、その際はよろしくお願いします。 お手数をおかけしました。
- regist_560
- ベストアンサー率24% (20/83)
1)まず、下記のような表を作ります。 A B C 1 あいう 日本 2 かきく JAPAN 3 さしす ニホン そして、このA1:C3を選択し、メニューの「挿入」→「名前」→「定義」で範囲名を適当に付けます。ここでは名前を「範囲」とします。 2) 同じファイルの別のワークシートまたは、上記の表を定義したワーク シート下行にでも、下記のデータがあるとします。 A B C 1 あいう 2 あいう 3 かきく 4 かきく 5 かきく 6 さしす 7 さしす 8 さしす このとき、B1セルには、”日本”と入ればよく、C1セルは空白になるということですね。 関数は、vlookupを使い、B1セルに下記のように入力します。 =VLOOKUP(A1,範囲,2,TRUE) C1セルには、こう入力します。 =VLOOKUP(A1,範囲,3,TRUE) こうすると、下記のようになるはずです。 A B C 1 あいう 日本 0 2 あいう 日本 0 3 かきく 0 JAPAN 4 かきく 0 JAPAN 5 かきく 0 JAPAN 6 さしす 0 ニホン 7 さしす 0 ニホン 8 さしす 0 ニホン ここで、計算結果が「0」と表示されるのがうっとうしい場合には、 上記のB1:C8を選択して、書式→セル→表示形式を選んで、 種類のボックスに、「G/標準」を変更し、この表示形式を「G/標準;;」 というように「;;」(セミコロン2つ)を付けてみてください。 すると、計算結果が0のセルについては、空白で表示されるようになります。 なお、計算式の意味は、ヘルプを参照してください。
お礼
ありがとうございました。 私の質問の仕方が悪かったことからお手数をおかけしました。 A列には沢山のデータが存在するため、1)の表を作成することが大変となってしまいます。 でも、勉強になりました。 ありがとうございました。
- tom04
- ベストアンサー率49% (2537/5117)
IF関数を使うのが一番簡単ではないでしょうか B1のセルに=IF(A1="あいう","日本","") C1のセルに=IF(A1="かきく","JAPAN",IF(A1="さしす","ニホン","")) とやってあとはオートフィル機能でドラックで完了!
お礼
A列は”あいう””かきく”等、いろいろな内容が記入されていますので、これでは少し大変かと思います。 でも、早々のご回答ありがとうございます。 私の説明不足でお手数をおかけしました。 今後ともよろしくお願いします。
お礼
ありがとうございます。 凄いです。 できました。 今回は作業列で行います。 本当に助かりました。 ありがとうございました。