

セルAに1000から8999までの数値があります。
セルAの配下のセルBに1から9までの数値があります。
セルBの配下のセルCに1から31の数値が入れられます。
セルCは最大数31で、現在入っているデータの個数は欠番もあるため
データの個数が10個であっても最大の値が10というわけではありません。
欠番のないものには最大数プラス1の値を
欠番のあるものは、その最小の欠番をセルCを参照してセルDに出したいのですが
ExcelまたはAccess(2007)でどのようなマクロを組めばいいでしょうか。
現在手動確認でやっているため、時間がかかりかつ、見落としのミスも多いです。
1000-1-1
2
3 →4 を表示させたい。
1000ー2-1
3
5
6 →2を表示させたい。
ご指導いただけないでしょうか。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
マクロが作れないから、質問したのですよね。
『このマクロですと、今回1個のデータの値をだせるのだと思いますが
今回5個あたいを出したい場合は』
あなたの質問に的確に答えているはずですがl。
プログラム中のコメントは、理解してもらうためのものです。
『今回5個あたいを出したい場合は』って、どこが分からないのですか?
私の回答を理解していますか?
とりあえず・・・・・
Dim key_data As String
Dim key_cnt As String
Dim out_cnt As Integer
Sub test1()
Dim row_max As Integer
Dim row_cnt As Integer
'出力個数読み込み(E1)
If Cells(1, 5).Value = "" Then
Exit Sub
End If
out_cnt = Cells(1, 5).Value
'最終行を求める
row_max = Range("C1").End(xlDown).Row
'欠番データ初期化
key_data = ""
key_cnt = 0
'2行目から最終行間でのループ
For row_cnt = 2 To row_max
'欠番チェック
If Cells(row_cnt, 3).Value > Cells(row_cnt - 1, 3).Value + 1 Then
'欠番データ設定
Call ketuban_set(Cells(row_cnt - 1, 3).Value + 1, Cells(row_cnt, 3).Value)
End If
'キーブレーク?
If Cells(row_cnt, 3).Value < Cells(row_cnt - 1, 3).Value + 1 Then
'欠番データ設定
Call ketuban_set(Cells(row_cnt - 1, 3).Value + 1, 10)
Cells(row_cnt - 1, 4).Value = key_data
'欠番データ初期化
key_data = ""
key_cnt = 0
If Cells(row_cnt, 3).Value > 1 Then
'欠番データ設定
Call ketuban_set(1, Cells(row_cnt, 3).Value)
End If
End If
Next row_cnt
'最終行の処理
'欠番データ設定
Call ketuban_set(Cells(row_cnt - 1, 3).Value + 1, 10)
Cells(row_cnt - 1, 4).Value = key_data
End Sub
Sub ketuban_set(min As Integer, max As Integer)
Dim cnt As Integer
For cnt = min To max - 1
'出力個数まで設定済み?
If key_cnt >= out_cnt Then
Exit For
End If
If key_cnt = 0 Then
key_data = "" & cnt
Else
key_data = key_data & "," & cnt
End If
key_cnt = key_cnt + 1
Next cnt
End Sub
今回はあえて、補足はしません。
出力個数が変化する場合は、どうしたらよいかは、プログラムから読み取ってください。
kokorone様
詳しい回答をありがとうございます。
マクロに不慣れなため、へんな質問をしておりました。
ご気分を害されたでしょうに、丁寧なご回答までいただいて
もうしわけございません。
もっと勉強いたします。
No.2
- 回答日時:
Sub test()
Dim row_max As Integer
Dim row_cnt As Integer
Dim key_data As Integer
'最終行を求める
row_max = Range("C1").End(xlDown).Row
'欠番データ初期化
key_data = -1
'2行目から最終行間でのループ
For row_cnt = 2 To row_max
'欠番チェック
If Cells(row_cnt, 3).Value > Cells(row_cnt - 1, 3).Value + 1 Then
'欠番データが初期状態ならば、欠番データ再設定
If key_data = -1 Then
key_data = Cells(row_cnt - 1, 3).Value + 1
End If
End If
'A/B列が変化?
If Cells(row_cnt, 3).Value < Cells(row_cnt - 1, 3).Value + 1 Then
'欠番データが初期状態ならば、欠番データ再設定(最大値+1)
If key_data = -1 Then
key_data = Cells(row_cnt - 1, 3).Value + 1
End If
Cells(row_cnt - 1, 4).Value = key_data
If Cells(row_cnt, 3).Value > 1 Then
key_data = 1
Else
key_data = -1
End If
End If
Next row_cnt
'最終行の処理
'欠番データが初期状態ならば、欠番データ再設定(最大値+1)
If key_data = -1 Then
key_data = Cells(row_cnt - 1, 3).Value + 1
End If
Cells(row_cnt - 1, 4).Value = key_data
End Sub
改訂版です。キーブレークした時の次の値が1以上の場合(いきなり欠番)の場合
欠番を1とします。
この回答への補足
kokorone様
ご回答ありがとうございます。
'A/B列が変化? とありますが、A,B列は変化します。
このマクロですと、今回1個のデータの値をだせるのだと思いますが
今回5個あたいを出したい場合は
列Cに欠番がない場合は列Bの最大値+1から順に+2、3、4で5個です。
欠番がある場合はその小さい値から順にとり、欠番をつかいきったら現在ある値の最大値+1となります。
1000-1-1
2
3 →今回5個なので、 4,5,6,7,8を出したい。
1000ー2ー1
4
5
7 →今回5個なので、2、3、6、8,9を出したい。
毎回出したい個数は変わります。
こちらの条件を付加すると、どのようなマクロになるでしょうか。
No.1
- 回答日時:
Sub test()
Dim row_max As Integer
Dim row_cnt As Integer
Dim key_data As Integer
'最終行を求める
row_max = Range("C1").End(xlDown).Row
'欠番データ初期化
key_data = -1
'2行目から最終行間でのループ
For row_cnt = 2 To row_max
'欠番チェック
If Cells(row_cnt, 3).Value > Cells(row_cnt - 1, 3).Value + 1 Then
'欠番データが初期状態ならば、欠番データ再設定
If key_data = -1 Then
key_data = Cells(row_cnt - 1, 3).Value + 1
End If
End If
'A/B列が変化?
If Cells(row_cnt, 3).Value < Cells(row_cnt - 1, 3).Value + 1 Then
'欠番データが初期状態ならば、欠番データ再設定(最大値+1)
If key_data = -1 Then
key_data = Cells(row_cnt - 1, 3).Value + 1
End If
Cells(row_cnt - 1, 4).Value = key_data
key_data = -1
End If
Next row_cnt
'最終行の処理
'欠番データが初期状態ならば、欠番データ再設定(最大値+1)
If key_data = -1 Then
key_data = Cells(row_cnt - 1, 3).Value + 1
End If
Cells(row_cnt - 1, 4).Value = key_data
End Sub
いかがでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
- Excel(エクセル) エクセルについて教えてください。 2 2023/06/14 11:11
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) Excel 特定セルの数値を参照したセルの0表示が空白にならないのはどうしてか? 3 2022/04/28 22:23
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- Excel(エクセル) エクセルの自動更新のタイミングについて 1 2022/07/20 16:12
- Excel(エクセル) Excelについて A1からA12まで、1月〜12月と入力し、 B1からB12の範囲に、C1とD1に 4 2022/05/26 22:48
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/25 16:07
- Excel(エクセル) IF 関数で「〇〇 という文字を含む場合」の分岐処理で表示された数字はSUMで数字集計できますか? 3 2022/08/02 16:29
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルに書き込めない/ファ...
-
printfの%eで指数部分の桁数を...
-
【Excel VBA】10進数を2進数に...
-
テキストファイルの結合について
-
stable diffusionのエラー
-
'dataType' 引数を Null にする...
-
マクロ登録したピボットが重い...
-
Excel VBA グラフ作成のとき...
-
micropythonコード 修正
-
ポインター引数の関数でコンパ...
-
C言語の勉強しています。すみま...
-
C言語 ファイル内のデータと入...
-
Excel 1セル当りの文字数が2...
-
char str[256]の256の意味は?
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
DataGridViewの特定列に入力さ...
-
postで送られてきたパラメータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
linuxのシェルでファイル名に先...
-
int型(2バイト)データの分割
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
【Excel VBA】10進数を2進数に...
-
ポインター引数の関数でコンパ...
-
'dataType' 引数を Null にする...
-
Excel VBA グラフ作成のとき...
-
テキストファイルの結合について
-
Cのプログラムがどうしても動き...
-
C言語でのLinuxとwindows共通の...
-
C言語の構造体にてバブルソート...
-
CreateProcessでの環境変数の設...
-
PINVOKEで構造体配列をマーシャ...
-
System.Collections.ArrayList ...
-
C言語 ファイル内のデータと入...
-
オセロゲーム 2次元配列で困...
-
RegQueryValueExでの2バイト文字
おすすめ情報