A列に会社の番号B列に会社名。
C列の該当する会社の行に1を入力します(複数あり)
入力と同時にD列に番号を表示。
例1)
1行名はタイトル行
A2=1 B2 〇〇 C2="" D2=""
A3=5 B3 ×× C3=1 D3=002-5-2
A4=5 B4 ×× C4=1 D4=002-5-2
※D3,D4の番号について→002は固定です。5は会社の番号のA列から。2は行カウントの数字ですが、一番上にある行カウントを以下の1が入力された行に自動表示。
次に、例1)で入力したC3とC4の1は削除して、次にC2、C5、C6に1を入力します。
この時に、例1)で表示されたD列の番号はそのまま表示されてほしいです。
A2=1 B2 〇〇 C2=1 D2=002-1-1
A3=5 B3 ×× C3="" D3=002-5-2
A4=5 B4 ×× C4="" D4=002-5-2
A5=1 B5 〇〇 C5=1 D2=002-1-1
A6=1 B6 〇〇 C6=1 D3=002-1-1
A7=5 B7 ×× C7="" D4=""
複雑なのですが、vbaで上記の内容を実現することは可能でしょうか。
可能でしたら教えてくださいませ。
宜しくお願いいたします。
No.2ベストアンサー
- 回答日時:
補足有難うございます.
内容を読むとマクロは少なくとも2つ用意した方が良さそうですね.
①Dのセルに出力するマクロ
②Cのセルを判定するマクロ
考え方から説明しますと
・①はCのセルに値が入力された際に実行する.
・入力されたセルの行の位置を引数に入れる.
(例えばC3セルに入力したなら引数は3,C5セルに入力したなら引数は5)
・上記引数とCellsを利用してD列に値を出力する.
・②はEのセルにが入力された際に実行する.
・入力されたセルの行の位置を引数に入れる.
・上記引数とCellsを利用してCのセルの値を消す.
次に確認ですが,行カウントについて同じグループというのは例えば質問文で考えるとA2,A5,A6は1で,A3,Aは5で,それぞれ同じグループという意味で良いですか.
上記の内容が正しいならこのシートでは上から順に新規で入力された値に対して順々に数値を振り分けているという事になります.
すなわち
・会社番号が1→行カウントで1
・会社番号が5→行カウントで2
例えばA8に会社番号が6というのが入力された場合には行カウントは3になりますか?
ここでの確認の意図は行カウントが上記内容で決定しているとするなら1つ作業列もしくは作業用シートを用意した方が良いと考えるためです.
この作業というのは先ずA列の値で重複する値を削除したものをコピーし,上から1,2,3と番号振り(行カウントの値を決める)を実行するというものです.
具体的には作業シートをSheet2に置くなら,A列の範囲で重複データを削除したものをシート2のA列にコピーすれば
Sheet2のA1が1,A2が5になります.
Dのセルの行カウントの値を出力する時はSheet1のAのセル値を検索値にSheet2のAのセル値と合致するセルの行番号として出力すれば良いという事になります.
(つまり会社番号と行カウントを整理するマクロが別に必要)
まだマクロを組んでテストをしていないので,実際のマクロの記述は回答できていませんが,ご参考までに
あともう一つ確認ですが,質問者さんの立場でこのシートで入力するのはA~C列とE列ですよね?
もしC列も自動化する場合にはE列に1が入力されているかどうかでC列の1の入力/削除も可能です.
ありがとうございます。
内容を確認しましてお返事させていただいております。
お忙しいところ申し訳ございませんが、ご確認お願いいたします。
■①Dのセルに出力するマクロ
②Cのセルを判定するマクロ
>ありがとうございます。②に関しましては以下のマクロを作成して動作確認済みです。ご確認いただけましたら幸いです。
Private Sub Worksheet_Change_2(ByVal Target As Range)
Set t = Intersect(Target, Range("E:E"))
If t Is Nothing Then Exit Sub
For Each c In t
If c.Column = 5 And c.Row > 1 And c.Value = 1 Then
Range("C1").Offset(c.Row - 1).ClearContents
End If
Next c
End Sub
■例えばA8に会社番号が6というのが入力された場合には行カウントは3になりますか?
>申し訳ございません。私も勘違いをしておりました。
この場合は、行カウントは8になります。
グループの一番上段にある、1が入っているのは何行目かで値が決まります。
例えば、A9、A12、A13が「8:丸井」という会社でC列に1を入力していきます。
この時のD列の番号はA9に1を入力したら002-8-9が自動表示されます。
次にA12を入力したら002-8-9が自動表示されます。
別シートに反映されたこの3行分のFAX若しくは印刷が完了したらE列に1を入力してC列の2がクリアとなります。
■あともう一つ確認ですが,質問者さんの立場でこのシートで入力するのはA~C列とE列ですよね?
>はい、A~C列とE列の入力となります。
No.1
- 回答日時:
質問文に書かれている事をVBAで実現する事は可能ですが,それは飽くまで例1の内容に限定して処理後の状態にするというだけです.
例えばC3とかC4の値を消すなら
Range("C3").Value = ""
とか
Range("C3").Select
Selection.Clear
みたいない感じで指定したセルの値を消す事はできます.
D3への出力なら
Range("D3").Value = "002-" & Range("A3") & "-" & Range("A2:A3").Rows.Count
(ここでのRows.Countが適切かは疑問がありますが)
マクロが実行されるタイミングが自動である,すなわちセルに何かしらの入力があった際に実行ということであるなら,過去にも同様の質問がありましたので,こちらを参照下さい.
https://oshiete.goo.ne.jp/qa/3163895.html
おそらく上記内容では質問者さんが本当にやりたい事を満足しないと思います.
処理自体はRangeで指定したセルもしくはセルの範囲にしか反映されませんので,例えばA8,A9・・・・と範囲を広げていった時には適用できないからです.
つまりもう少しどういう条件になった時に各々の処理を実行するのかを明確にする必要があります.
・C列の値を入力もしくは消すのはどういう条件なのか?例えばC3に1は入力されているが,処理後は空白になっている.この処理をもう一度行うと1が再度入力されないか?
・複数行を一括処理する時に,処理する行をどのように判定するか?
(自動で出力されるのであれば,複数行を一括で処理するような事は起こらない様にも思いますが)
・行カウントの定義は?
(質問文からは良く分からないので,どういう条件で数値が決まるかを書いて頂きたいです)
などなど
具体的な実行後の状態ではなく,処理内容を書かれると良いと思いますよ.
ご丁寧にご指導いただきまして、ありがとうございます。
申し訳ございませんでした。
・C列を消すときは、C列に1を立てると、その行の内容が別シートのFAXフォームにとんで、FAXが終わるとシートに戻ってきてE列に確定の列を設けておりここに1を入力するとC列の1は削除されます。
・複数行を一括処理する時はc列に1を入力した行は同じグループとみなし、D列の番号は同じ番号となります。
・行カウントの定義は、同じグループの一番上の行のカウントを使用します。
ご質問いただいておりました内容は以上の通りです。
何度もすいません。
宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCEL 行内のデータを2行に分けて、表を作り直したいのです。教えてください。 5 2023/06/25 14:00
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- Visual Basic(VBA) C3とC4のセルに、Visual basicで実行した時入力した値をC3に表示させ、その後に、C3に 1 2023/07/14 09:43
- Visual Basic(VBA) セルに抜けた番号の代わりに空白を挿入する 4 2023/04/10 20:29
- Excel(エクセル) エクセルのvlookupについて質問です 3 2023/01/05 15:15
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Excel(エクセル) エクセルについて質問です 1 2022/12/10 11:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel ウインドウ枠の固定をす...
-
エクセル マクロ オートフィ...
-
エクセルで特定の文字列が入っ...
-
【Excel関数】UNIQUE関数で"0"...
-
Excel グラフのプロットからデ...
-
エクセル マクロ等を利用した各...
-
セルではなく行や列、シート全...
-
結合されたセルをプルダウンの...
-
エクセル 上下で列幅を変えるには
-
[EXCEL]ボタン押す→時刻が表に...
-
EXCELで最後の行を固定
-
エクセルマクロで偶数行(又は...
-
A1に入力された文字列と同じ文...
-
EXCEL 「最後のセル」のリセット
-
エクセルのマクロで意図しない...
-
エクセルVBA:リストに登録した...
-
EXCELマクロを使い、空白行では...
-
VBAで色の付いているセルの行削除
-
Excel2007で、指定範囲の行高さ...
-
エクセル マクロで数値が変っ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
結合されたセルをプルダウンの...
-
[EXCEL]ボタン押す→時刻が表に...
-
excel 小さすぎて見えないセル...
-
AのセルとB行を比較して、一致...
-
エクセル マクロで数値が変っ...
-
エクセル 上下で列幅を変えるには
-
excelのデータで色つき行の抽出...
-
Excel グラフのプロットからデ...
-
エクセル2016で時間を入力して...
-
VBAで色の付いているセルの行削除
-
特定の文字がある行以外を削除...
-
連続データが入った行の一番右...
-
エクセルVBA 最終行を選んで並...
-
エクセルのセルに指定画像(.jpg...
-
エクセルで昨日までの日付デー...
-
エクセルマクロで偶数行(又は...
-
A1に入力された文字列と同じ文...
おすすめ情報