
VBA初心者です。
昨日、複数のご教示をいただきましたが、要件の追加があり(汗)再度質問させていただきます。
(管理台帳が四半期単位の作成となるための追加要件です)
以下の要件をVBAで処理したいのです。
継続要件
・開始ボタン押下による処理開始
・区分ごとの管理番号を採番(4ケタ、0パディング)
追加要件
・区分ごとに管理番号の開始番号を変える(前期の最終番号を継承するため)
→新規ファイルごとにメンテする予定です。
・区分が未入力の場合は管理番号列に空白を返す
例)
管理番号:A列
案件名:B列
区分:C列
管理番号 案件名 区分
---------------------------------
a0100 案件1 a
b0051 案件2 b
c0001 案件3 c
a0101 案件4 a
案件5
b0052 案件6 b
a0102 案件7 a
c0002 案件8 c
関数では以下の様になると思います。
(前回記載した数式をアレンジしています)
=IF(C2="a",C2&RIGHT(COUNTIF(C$2:C2,C2)+10099,4),IF(C2="b",C2&RIGHT(COUNTIF(C$2:C2,C2)+10050,4),IF(C2="c",C2&RIGHT(COUNTIF(C$2:C2,C2)+10000,4),"")))
再度、御教示よろしくお願いします。
No.2ベストアンサー
- 回答日時:
こんばんは!
C列は「a,b,c」のいずれかが入るという前提です。
関数での場合はA2セルに
=IF(C2="","",C2&TEXT(50*(MATCH(C2,{"c","b","a"},0)-1)+COUNTIF(C$2:C2,C2)-IF(C2="a",1),"0000"))
という数式を入れフィルハンドルでずぃ~~~!っと下へコピーしてみてください。
今回はVBAでの方法をご希望のようですので、一例として・・・
Sub Sample1()
Dim i As Long, lastRow As Long, myVal As Variant
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
If lastRow > 1 Then
Range(Cells(2, "A"), Cells(lastRow, "A")).ClearContents
End If
For i = 2 To lastRow
If Cells(i, "C") <> "" Then
myVal = WorksheetFunction.CountIf(Range(Cells(2, "C"), Cells(i, "C")), Cells(i, "C"))
Select Case Cells(i, "C")
Case "a"
Cells(i, "A") = Cells(i, "C") & Format(100 + myVal - 1, "0000")
Case "b"
Cells(i, "A") = Cells(i, "C") & Format(50 + myVal, "0000")
Case Else
Cells(i, "A") = Cells(i, "C") & Format(myVal, "0000")
End Select
End If
Next i
End Sub
といった感じでも大丈夫だとおもいますが、
わざわざVBAでやる必要はないように思えます。m(_ _)m
ご教示いただきありがとうございます。
VBAのコードもですが、関数に関しても勉強不足であると痛感しました。
orz
おっしゃる通り、VBAでやる必要がないことかもしれません。
大変助かります。
ありがとうございました。
No.1
- 回答日時:
前回回答したものです。
・区分が未入力の場合は管理番号列に空白を返す
については
Sub ボタン1_Click()
For i = 2 To Range("C" & Rows.Count).End(xlUp).Row
If Range("C" & i).Value="" Then
Range("A" & i).Value =""
Else
Range("A" & i).Value = Range("C" & i).Value & Right("000" & WorksheetFunction.CountIf(Range("C2:C" & i), Range("C" & i).Value), 4)
End If
Next
End Sub
こんな感じで大丈夫かと思います。
・区分ごとに管理番号の開始番号を変える(前期の最終番号を継承するため)
→新規ファイルごとにメンテする予定です。
これでは、データの管理の仕方が悪いです。
データは一枚のシートにひたすら縦方向に入力していく
必要に応じて、ある期間のデータを別シート、或いは 別ファイルに抽出するようにする。
こちらの方が良いです(普通です)
今回のコードでも、実行すると2行目から最終行まで再度、管理番号が入ることになりますが
本来であれば、C列(区分)を入力したら、その都度
その行に管理番号が自動で入る仕組みの方が良いと思います。
重ね重ね御教示いただきありがとうございます。
データ管理や採番の仕組みなど、ご指摘の通りだと今更ながらに思いました。
特にDBの観点すると、おっしゃる通りと赤面しています。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【画像あり】オートフィルター...
-
他のシートの検索
-
Office2021のエクセルで米国株...
-
vba テキストボックスとリフト...
-
【マクロ】元データと同じお客...
-
【マクロ】【相談】Excelブック...
-
【マクロ】実行時エラー '424':...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
エクセルシートの見出しの文字...
-
【関数】3つのセルの中で最新...
-
LibreOffice Clalc(またはエク...
-
【マクロ】excelファイルを開く...
-
【マクロ】【画像あり】❶ブック...
-
【マクロ】【画像あり】4つの...
-
Excelで4択問題を作成したい
-
【関数】=EXACT(a1,b1) a1とb1...
-
エクセルの複雑なシフト表から...
-
UNIQUE関数の代用
-
【関数】同じ関数なのに、エラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】元データと同じお客...
-
エクセルの関数について
-
【画像あり】オートフィルター...
-
エクセルのVBAで集計をしたい
-
エクセルのリストについて
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
エクセルの複雑なシフト表から...
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
【マクロ】左のブックと右のブ...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
【関数】同じ関数なのに、エラ...
-
Amazonでマイクロソフトオフィ...
-
ページが変なふうに切れる
おすすめ情報