• 締切済み

エクセルで空白以外のセルの値を取りたいのですが

質問させていただきます。 エクセルで下記のようなデータがあるのですが、 A列が製品番号 B列が製品名 C列が分類名 D列からZ列までがC列に入れる名称がひとつだけあります。 2つ以上入ってることはありません。 教えていただきたいのは、D列からZ列までに値があれば自動でC列に反映させる関数です。 例えば、D2にPCとあればC2にPCと反映される。 Z3にTVとあればC3にTVと反映される。 という具合です。 この場合、E2からZ2、E3からY3までは空白になってます。 データの件数が3000件以上あり、週に2回くらいやる作業なのでなるべく作業効率を上げたいと思っております。 よろしくお願いいたします。

みんなの回答

回答No.7

回答2です。 マクロは力ずくの処理をすばやく簡単にやってくれるので、今回のケースも業務の効率化という観点からはマクロ化のメリットは十分にあります。 ちなみにそれなりのマクロを書くには知識と経験が必要ですが、単なるツールとして使用されている方々にはマクロの書き方も効率化(わかりやすい、簡単等)が一番となるでしょう。そういう方たちにとってはマクロ自体についての長たらしい講釈は混乱を招くことが多いため、あまり意味がないと私は考えています。 Sub Macro1() Dim rw As Integer '行番号 Dim cl As Integer '列番号 For rw = 2 To 5000 '2行目から開始 'A列に製品番号がなければ終了 If Cells(rw, 1).Value = "" Then Exit Sub End If 'rw行のD列からZ列まで値を探す For cl = 4 To 26 If Cells(rw, cl).Value <> "" Then 'D列以降にデータがあれば、C列に値を代入 Cells(rw, 3).Value = Cells(rw, cl).Value Exit For '次の行へ End If Next Next End Sub マクロ実行後、DからZに値の入れなおしがあったらまたマクロを実行する必要があります。 ただ、マクロをまったくご存じないのなら、お勧めはしません。

top12345
質問者

お礼

ありがとうございます。 マクロは未経験ですので、とりあえずは確実にできるやり方でこなしていこうと思います。 本当にありがとうございました。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

#3/4の回答者です。 >D列からZ列はIFとCOUNTIFで作られた関数が入っていて、値に貼り付けなおしてやってみてもだめでした。 #1の方のお礼の部分を読んでみて、D-Zに数式があるなら、話は違いますね。 #4の「それ自体は、数式のそれと同じものです。」というのは、私も、最初 #1の方の回答と同じ数式をイメージから、マクロを作りましたから、#1の数式で出ないなら、それは#3のマクロはうまく行きません。 >E2からZ2、E3からY3までは空白になってます >D2にPCとあればC2にPCと反映される。 確かに、私の読み違いであろうけれども、正しい情報がなかったとも言えます。私は、後だし条件で大きく内容が変わってしまう場合は、お答えはしないようにしています。 IF とCOUNTIF なら、数値か、文字長0の空白("")があるはずですが、"PC"とは出てこないはずで、一体、そのシートは、どんな状態であるのでしょうか、見当が付きません。 マクロが分からないのはいたし方がないとしても、別の質問で、こんどこそマクロでなくてはならないような質問が出ています。#2の数式で良いというようなスタイルは、マクロの移植は可能だとしても、ワークシートの状態が明らか出ない限りは、あまりメリットはないですから、これ以上はやめておきます。

top12345
質問者

お礼

お礼が遅くなって申し訳ありません。 IFとCOUNTIFですがD2には、 =if(countif(b2,"*"&"XXXX"&"*"),"PC","")というように特定の文字がB列に入っていればPCという文字を返すという関数が入っておりました。E列からZ列まで同じようにIFとCOUNTIFで違う分類名を抽出していました。 自分が作ったシートでないとはいえ、説明が足りずに申し訳ありませんでした。

すると、全ての回答が全文表示されます。
  • soixante
  • ベストアンサー率32% (401/1245)
回答No.5

#1の者です。 >D列からZ列はIFとCOUNTIFで作られた関数が入っていて ということなら空白ではないですね。 空白に見えてるだけとか。 IFの条件分岐で、ある条件ならば、"" としてあるのなら別ですが。 IF関数は何(数値or文字)を返すようになってるのでしょうか。 また、D列~Z列は名称とのことですが、COUNTIF関数が入っているというのなら 数値が返ってくるのか、などちょっと 不明点があります。 既回答にもある通り、マクロを使うのが良いとは思いますが、分からないということでしたら、私なら 以下のようにするかもしれません。作業列を使います。 D~Z列に何か一つしか入ってなくて(or 入ってないように見えて)、それを拾うと言うのなら、その拾いたいセルのデータの文字数は その行の中で最大と考えて、 1) AD2セルに、 =LEN(D2)  と入れて、AZ2セルまで右に引っ張る。また、データがある最終行まで下に引っ張る。 ・・・D~Z列の各セルの文字数を出しています。 2)AC2セルに、 =MATCH(MAX(AD2:AZ2),AD2:AZ2,0) と入れて、最終行まで下に引っ張る。 ・・・文字数が最大のセルは何番目にあるかを出しています。 3)C2セルに、  =INDEX(D2:Z2,1,AC2)  と入れて、最終行まで引っ張る。 ・・・最大文字数のセルの内容を引いてきています。 ご意向にそぐってるか分かりませんけどご参考まで。 私の知識ではこんな感じです。 っていうか、#2さんの方法でOKならそっちのがシンプルですね。

top12345
質問者

お礼

ありがとうございます。 業務の関係で皆さんのアドバイスを全て確認する時間がないのが申しわけないです。 じっくりやってる時間がないので、とりあえず一番簡単にできる方法でということにさせていただきました。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

>マクロはさっぱりわからないので申し訳ありません・・・ D~Z に値を入れたときに、同じ行のC列に値が入るという仕組みになっております。それ自体は、数式のそれと同じものです。ただ、D~Z の間に2つの値をさせないとか、数字でも文字でも可能にするとか、エラーを出さないようにと、可能な限りの工夫はしてあるのですが、それが体験できないなら、残念ながら無理にはお勧めしません。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 マクロで処理するのはいかがでしょうか。 マクロの取り付け方 マクロを実行しようとするワークシートのシートタブ(下部のSheet1,Sheet2 ...)を右クリックすると、「コードの表示(V)」というメニューがありますから、それをクリックしてください。そして、開いた画面に、以下のコードを貼り付けて、Alt + Q で閉じれば設定は完了です。 数字・文字の区別はありません。2つ入れられません、ということですから、もう一度別な場所に入れると、同じ行の前のデータは消えます。 '------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim buf As Variant If Target.Row = 1 Then Exit Sub 'タイトル行は除外 If Intersect(Target, Columns("D:Z")) Is Nothing Then Exit Sub 'D~Zの範囲 If Target.Count > 1 Then Exit Sub 'データは1つのみ   Application.EnableEvents = False   If Target.Value = "" Then     Cells(Target.Row, 3).ClearContents   '2つは入れられない   Else    If Application.CountA(Columns("D:Z").Rows(Target.Row)) > 1 Then     buf = Target.Value     Columns("D:Z").Rows(Target.Row).ClearContents     Target.Value = buf     Cells(Target.Row, 3).Value = buf    Else     Cells(Target.Row, 3).Value = Target.Value    End If   End If   Application.EnableEvents = True End Sub

top12345
質問者

お礼

ありがとうございます。 これはALT+Qでマクロの画面を閉じたら自動でc列に値が入るということなのでしょうか? 昼休みに試してみたら特にc列には何も入らなかったので・・・ マクロはさっぱりわからないので申し訳ありません・・・

すると、全ての回答が全文表示されます。
回答No.2

>2つ以上入ってることはありません。 でしたら力ずくですが、 =D2&E2&・・・&Z2 という方法もあります。必要なら全体にTrimをするとか。 ご参考まで。

top12345
質問者

お礼

なるほど! 意外と簡単にできるものなんですね。 とりあえずはこれで問題なくC列に値が入りました。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • soixante
  • ベストアンサー率32% (401/1245)
回答No.1

C2セルに以下をいれて下に。 =INDEX(D2:Z2,1,MATCH("*",D2:Z2,0)) セルの右下端の黒い小さな■をダブルクリックでもいいです。 どうでしょうか。

top12345
質問者

お礼

ありがとうございます。 昼休みに試してみたところ、D列に値があるものはC列に反映されますが、E列からZ列に値がある場合はC列に反映されませんでした。 D列からZ列はIFとCOUNTIFで作られた関数が入っていて、値に貼り付けなおしてやってみてもだめでした。 ちょっと原因がわかりません・・・

すると、全ての回答が全文表示されます。

関連するQ&A