セル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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CakePHP Undefined index
-
printfの%eで指数部分の桁数を...
-
C#でのswitch文
-
マクロ登録したピボットが重い...
-
データの値の近いものをグルー...
-
【Excel VBA】10進数を2進数に...
-
テキストファイルの結合について
-
FFTがうまくできない
-
Excel VBA グラフ作成のとき...
-
ポインター引数の関数でコンパ...
-
エクセルシート名の制限を変更...
-
10Mバイトて文字数に すると何...
-
C++ Builderで文字列をバイトに...
-
UTF-8で5~6バイトになる文字コ...
-
COBOLのCOMP形式について
-
Excel 1セル当りの文字数が2...
-
DataGridViewの特定列に入力さ...
-
バイト列とバイナリ列の違いが...
-
char str[256]の256の意味は?
-
「1TB」のHDDに日本語は何字入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
printfの%eで指数部分の桁数を...
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
CreateProcessでの環境変数の設...
-
RegQueryValueExでの2バイト文字
-
'dataType' 引数を Null にする...
-
【Excel VBA】10進数を2進数に...
-
matlabのソースコードをpython...
-
C++ multipart/form-data f
-
Cのプログラムがどうしても動き...
-
テキストファイルの結合について
-
int型(2バイト)データの分割
-
Excel VBA グラフ作成のとき...
-
C言語 構造体の名前欄?を小文...
-
C++/CLIのオブジェクト型配列
-
CSVファイルの行と列のセルって...
-
C言語 ファイル内のデータと入...
-
アプリケーション
おすすめ情報