
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Dim lastNum As Long
Dim lastRow As Long
If Target.Column <> 2 Then Exit Sub 'B列以外は処理しない
Application.EnableEvents = False
lastRow = Cells(Rows.Count, 2).End(xlUp).Row 'B列の最終行を取得
For Each cell In Range("B" & lastRow)
If cell.Value <> "" Then
lastNum = lastNum + 1
cell.Offset(0, -1).Value = "(" & lastNum & ")" 'A列に、順番に番号を設定する
Else
cell.Offset(0, -1).Value = "" 'B列が空白の場合、A列も空白にする
End If
Next cell
Application.EnableEvents = True
End Sub
このコードを実行すると数字が-1などのマイナス表記になってしまいます。
(1)と表示するにはどうしたらよいでしょうか?
セルの書式設定のユーザー定義で "("0")"は使用しない方法を探しています
どなたか教えてください。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Dim lastNum As Long
Dim lastRow As Long
If Target.Column <> 2 Then Exit Sub 'B列以外は処理しない
Application.EnableEvents = False 'コーディングの作法として正しいが本件マクロではなくてもよいのでは
lastRow = WorksheetFunction.Max(Cells(Rows.Count, 1).End(xlUp).Row, Cells(Rows.Count, 2).End(xlUp).Row)
For Each cell In Range("B1:B" & lastRow) 'オリジナルコードの"B1"を"B1:B"に修正
If cell.Value <> "" Then
lastNum = lastNum + 1
'cell.Offset(0, -1).NumberFormatLocal = "@" 'こちらを有効にして、次行をシングルコーテーションなしにしてもよい
cell.Offset(0, -1).Value = "'(" & lastNum & ")" 'A列に、順番に番号を設定する"
Else
cell.Offset(0, -1).Value = "" 'B列が空白の場合、A列も空白にする
End If
Next cell
Application.EnableEvents = True 'コーディングの作法として正しいが本件マクロではなくてもよいのでは
End Sub
ご質問者の課題は
>数字が-1などのマイナス表記になってしまいます。
とのことです。
大変失礼とは存じますが、ご質問者の提示されたコードでは以下の2点の考慮がもれていると思います。
1.B列のセルが空白の場合、隣のA列セルには番号を付与せず、次の空白以外の行に連番を付与するコードなのにもかかわらず、B列のセルに値の消去・セルの削除が発生した場合の考慮がない
2.EXCELの仕様では(1)は-1を意味する。これは欧米の財務諸表では一般にマイナス数値を()で囲むから(日本の財務諸表で-1を▲1と表記するのと同様)といわれているが、それに対する考慮がない
上記1、2を考慮して修正すると、上記のようなコードになると思います。
上記1で指摘したように、ご質問者のオリジナルコードではlastRowにB列の最終行位置を代入していますが、例えばB列5行目まで入力して、A列に(1)~(5)まで表示されたとして、その後B5セルの値を消去するとか、B4セルを削除して上側につめるとかしたらどうなるでしょうか?
ご想像のとおり、(5)だけが意味なく表示された状態になってしまいます。つまり、A列、B列の最終行数の大きい方をlastRowに代入しなくてはいけません。
上記2で指摘したように、()で囲んだ数値はマイナスを意味しますので、シングルコーテーションを付けて文字列にする必要があります。
あるいは、()で囲んでもマイナス数値と認識されなければよいわけですから、直前に
cell.Offset(0, -1).NumberFormatLocal = "@"
を記述して文字列にしてしまえば、
cell.Offset(0, -1).Value = "(" & lastNum & ")"
はそのまま、シングルコーテーションなしで記述するという手もあります。
さらに言えば()で囲むから上記2の問題が発生するわけですから、()の替わりに【】を使って
cell.Offset(0, -1).Value = "【" & lastNum & "】"
とするだけでマイナス表記を回避することは可能です。
No.3
- 回答日時:
こんにちは
横から失礼します。
全く別の発想になってしまいますが、以下のコードを標準モジュールに記入して、事前に一度だけ実行しておくという案ではダメでしょうか?
Sub hoge()
Const f1 = "=IF(B1="""","""",IF(ROW()=1,1,"
Const f2 = "MAX(OFFSET(A$1,,,ROW()-1))+1))"
Range("A1:A999").FormulaLocal = f1 & f2
End Sub
No.2
- 回答日時:
以下のようにしてください。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Dim lastNum As Long
Dim lastRow As Long
If Target.Column <> 2 Then Exit Sub 'B列以外は処理しない
Application.EnableEvents = False
lastRow = Cells(Rows.Count, 2).End(xlUp).Row 'B列の最終行を取得
For Each cell In Range("B1:B" & lastRow)
If cell.Value <> "" Then
lastNum = lastNum + 1
cell.Offset(0, -1).Value = "'(" & lastNum & ")" 'A列に、順番に番号を設定する
Else
cell.Offset(0, -1).Value = "" 'B列が空白の場合、A列も空白にする
End If
Next cell
Application.EnableEvents = True
End Sub
----------------------------------
変えたのは
For Each cell In Range("B" & lastRow)を
For Each cell In Range("B1:B" & lastRow)
cell.Offset(0, -1).Value = "(" & lastNum & ")"を
cell.Offset(0, -1).Value = "'(" & lastNum & ")"
です。
No.1
- 回答日時:
以下ChatGPTによる回答です。
正しいかどうかはご自身で検証してください。
以下のコードを使用して、(1)という形式でA列に番号を設定することができます。
vbnet
Copy code
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Dim lastNum As Long
Dim lastRow As Long
If Target.Column <> 2 Then Exit Sub 'B列以外は処理しない
Application.EnableEvents = False
lastRow = Cells(Rows.Count, 2).End(xlUp).Row 'B列の最終行を取得
For Each cell In Range("B" & lastRow)
If cell.Value <> "" Then
lastNum = lastNum + 1
cell.Offset(0, -1).Value = "(" & Format(lastNum, "0") & ")" 'A列に、順番に番号を設定する
Else
cell.Offset(0, -1).Value = "" 'B列が空白の場合、A列も空白にする
End If
Next cell
Application.EnableEvents = True
End Sub
上記のコードで使用されているFormat関数の第2引数には、数値のフォーマットを指定する文字列を渡します。"0"は数字を表し、括弧内に表示される数字をゼロ埋めせずに表示します。したがって、"(1)"という形式でA列に番号を設定することができます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) Sub 分けてソートして貼り付ける() Dim srcSheet As Worksheet Dim 6 2023/08/04 19:57
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
エクセルのセル内の文字の一部...
-
PowerPointで表の1つの列だけ...
-
EXCELで 一桁の数値を二桁に
-
VBAで文字列を数値に変換したい
-
エクセルで文字が混じった数字...
-
VBA 連続行データを5行ずつ隣の...
-
エクセル 同じ値を探して隣の...
-
エクセル 文字数 多い順 並...
-
エクセルの表から正の数、負の...
-
エクセルで最初のスペースまで...
-
VBAでセル入力の数式に変数を用...
-
Excelで半角の文字を含むセルを...
-
エクセルで、列の空欄に隣の列...
-
エクセルの項目軸を左寄せにしたい
-
50人を数回、グループ分けする...
-
Excel、市から登録している住所...
-
文字列に数字を含むセルを調べたい
-
お店に入るために行列に並んで...
-
VBAで特定の文字を探して隣のセ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
2つのエクセルのデータを同じよ...
-
Excelで半角の文字を含むセルを...
-
エクセルで最初のスペースまで...
-
エクセル 文字数 多い順 並...
-
エクセルで文字が混じった数字...
-
エクセル(勝手に太字になる)
-
EXCELで 一桁の数値を二桁に
-
「B列が日曜の場合」C列に/...
-
文字列に数字を含むセルを調べたい
-
VBAで文字列を数値に変換したい
-
エクセルの項目軸を左寄せにしたい
-
エクセルで、列の空欄に隣の列...
-
【VBA】特定列に文字が入ってい...
-
エクセルの表から正の数、負の...
-
オートフィルターをかけ、#N/A...
-
Excel、市から登録している住所...
-
エクセルの関数(日数の平均の...
-
エクセルのセル内の文字の一部...
おすすめ情報