
質問させていただきます。
エクセルで下記のようなデータがあるのですが、
A列が製品番号
B列が製品名
C列が分類名
D列からZ列までがC列に入れる名称がひとつだけあります。
2つ以上入ってることはありません。
教えていただきたいのは、D列からZ列までに値があれば自動でC列に反映させる関数です。
例えば、D2にPCとあればC2にPCと反映される。
Z3にTVとあればC3にTVと反映される。
という具合です。
この場合、E2からZ2、E3からY3までは空白になってます。
データの件数が3000件以上あり、週に2回くらいやる作業なのでなるべく作業効率を上げたいと思っております。
よろしくお願いいたします。
A 回答 (7件)
- 最新から表示
- 回答順に表示
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に値の入れなおしがあったらまたマクロを実行する必要があります。
ただ、マクロをまったくご存じないのなら、お勧めはしません。
ありがとうございます。
マクロは未経験ですので、とりあえずは確実にできるやり方でこなしていこうと思います。
本当にありがとうございました。
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の数式で良いというようなスタイルは、マクロの移植は可能だとしても、ワークシートの状態が明らか出ない限りは、あまりメリットはないですから、これ以上はやめておきます。
お礼が遅くなって申し訳ありません。
IFとCOUNTIFですがD2には、
=if(countif(b2,"*"&"XXXX"&"*"),"PC","")というように特定の文字がB列に入っていればPCという文字を返すという関数が入っておりました。E列からZ列まで同じようにIFとCOUNTIFで違う分類名を抽出していました。
自分が作ったシートでないとはいえ、説明が足りずに申し訳ありませんでした。
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ならそっちのがシンプルですね。
ありがとうございます。
業務の関係で皆さんのアドバイスを全て確認する時間がないのが申しわけないです。
じっくりやってる時間がないので、とりあえず一番簡単にできる方法でということにさせていただきました。
No.4
- 回答日時:
>マクロはさっぱりわからないので申し訳ありません・・・
D~Z に値を入れたときに、同じ行のC列に値が入るという仕組みになっております。それ自体は、数式のそれと同じものです。ただ、D~Z の間に2つの値をさせないとか、数字でも文字でも可能にするとか、エラーを出さないようにと、可能な限りの工夫はしてあるのですが、それが体験できないなら、残念ながら無理にはお勧めしません。
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
ありがとうございます。
これはALT+Qでマクロの画面を閉じたら自動でc列に値が入るということなのでしょうか?
昼休みに試してみたら特にc列には何も入らなかったので・・・
マクロはさっぱりわからないので申し訳ありません・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Excel(エクセル) エクセル テーブル機能の不明点 2 2022/04/14 14:10
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- Excel(エクセル) エクセルで最初に値が入っているセルを見つける方法はありますか? 2 2023/07/18 14:58
このQ&Aを見た人はこんなQ&Aも見ています
-
空白でないセルの値を返す方法について
PowerPoint(パワーポイント)
-
空白でないセルの値を返す方法について その2
Excel(エクセル)
-
エクセル空白以外の文字を抽出
その他(Microsoft Office)
-
-
4
excelで、空白を除いてデータを抽出する方法について
Excel(エクセル)
-
5
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
6
VBA Cのセルが空白でなかったら、Aのセルに順番に数値を入力
Visual Basic(VBA)
-
7
Vba エクセルマクロで、 A列の、A1セルからA10セルに空白のある行を削除する、のは Range
Excel(エクセル)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
10
空白セルをとばして転記
Visual Basic(VBA)
-
11
EXCEL VBAで、セルの文字列の前後に文字を入力する方法は?
その他(Microsoft Office)
-
12
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
13
エクセルマクロ 【空白セルを無視する方法を教えてください】
Excel(エクセル)
-
14
一番多く表示のある値(文字列)を、Excel関数で抽出したい
Excel(エクセル)
-
15
空白行を無視してコピーするマクロについて
Excel(エクセル)
-
16
vba 隣のセルに値がある行だけ関数をコピー&ペーストしたい A1 100001 A2 100002
Visual Basic(VBA)
-
17
Excelでセル参照したとき、書式も一緒に持ってくるには?
Windows Vista・XP
-
18
Excelで重複データの件数ではなく、何番目かを求める方法
Excel(エクセル)
-
19
cellsで特定の離れた範囲を選択する方法は?
Visual Basic(VBA)
-
20
Excelのシート上のShapeにイベントは設定できる?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
一行おきにコピーするマクロが...
-
エクセルで行挿入した際、自動...
-
VBAで同じブック内の別シー...
-
エクセルの関数について(日付で...
-
合計計算
-
"=LEFT(RC[-13],5)"を書き換えたい
-
エクセルマクロ:空白行を除い...
-
Excelの非表示列も含めてコピー
-
入力情報の無いふりがなの自動取得
-
エクセルで反転コピー
-
Excel マクロ 重複チェックにつ...
-
エクセル マクロ 貼り付け先が...
-
エクセルで空白以外のセルの値...
-
EXCELの関数について
-
このコード(For Each…)ですが...
-
EXCEL 数入力のある右端の列の...
-
エクセルで表示された値だけ行...
-
Excel VBAで日にちを入力して線...
-
マクロ ScrollColumn について
-
特定の桁数を抽出
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELにて複数列を同条件(色)...
-
シート保護の状態で行の追加を...
-
エクセルで表示された値だけ行...
-
Excelの非表示列も含めてコピー
-
エクセルで空白以外のセルの値...
-
エクセル VBA 指定の範囲内をコ...
-
エクセルで反転コピー
-
エクセルの関数について(日付で...
-
一行おきにコピーするマクロが...
-
エクセル マクロ 貼り付け先が...
-
[Excel VBA]空白セル以外に連番...
-
特定の桁数を抽出
-
エクセルで行挿入した際、自動...
-
エクセルVBA 複数列をコピーす...
-
Excel 条件に従いセル移動するには
-
マクロで値がある列までコピー
-
マクロ初心者です、小数点6桁で...
-
エクセルで縦に長い表を印刷
-
【Excel-マクロ】グループとア...
-
行数が不規則な一週間ごとの合...
おすすめ情報