
No.5ベストアンサー
- 回答日時:
操作例:
A列に0000"A"0-0のユーザー定義の表示形式を取り付けておく
シート名タブを右クリックしてコードの表示を選ぶ
現れたシートの内容を全て消去し、改めて下記をコピー貼り付ける
private sub worksheet_change(byval Target as excel.range)
dim h as range
on error resume next
for each h in application.intersect(target, range("A:A")) ’実際に合わせて修正
if h <> "" then
h.numberformat = "0000A0-0"
if application.istext(h) then
application.enableevents = false
h = application.replace(h, len(h), 0, "-")
h = application.replace(h, len(h)-2, 0, "A")
application.enableevents = true
end if
end if
next
end sub
ファイルメニューから終了してエクセルに戻る
A列に123451や1234A1とデータを記入する。
手でやりますとお話ししたことを、代わりに機械がやってくれます。
No.6
- 回答日時:
No.4です。
D列で操作したい!というコトなので、
前回のコードでOKであるという前提です。
Columns(1)を
Columns(4) または Range("D:D")
に変更してみてください。
尚、前回のコードの場合、頭が「0」から始まる場合はいくら7文字を入力しても
「入力値が不正」だとメッセージボックスがでますので、
D列の表示形式を「文字列」にして操作してみてください。
何とかご希望通りになれば良いのですが m(_ _)m
No.4
- 回答日時:
こんにちは!
横からお邪魔します。
No.3さんの補足を読ませていただくと、最初の質問内容と状況が違ってきていますが・・・
>実際はもう少し複雑で「1234511」で「12345A1-1」となるユーザー定義
>「00000"A"0"-"0」を使っていて
>「12345B1」で「12345AB-1」にしたいのですが
とありますので、一例です。
セルの表示形式で操作するのではなく、文字列データとしてみてはどうでしょうか?
A列でマクロが実行されるようにしていますので、A列のセルの表示形式は「標準」にしておいてください。
画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストして、A列に7文字のデータを入力してみてください。
Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
If Intersect(Target, Columns(1)) Is Nothing Or Selection.Count <> 1 Then Exit Sub
Dim str As String
Application.EnableEvents = False
str = Target
If Len(str) = 7 Then
Target = Left(str, 5) & "A" & Mid(str, 6, 1) & "-" & Right(str, 1)
Else
MsgBox "入力値が不正です。"
Target.Select
Selection = ""
End If
Application.EnableEvents = True
End Sub 'この行まで
こんな感じではどうでしょうか?m(_ _)m
この回答への補足
ありがとうございます。
まだ実際に試してはいないのですが、
A列ではなくD列で使用するにはColumns(1)の数値を変えればいいのでしょうか?
素人で申し訳ないです。
No.3
- 回答日時:
一言目に回答した通り、まずユーザー定義じゃ出来ません。
信じる信じないはご自由に。>以外の方法
具体的にどうしたら出来るのかは、既に回答済みです。他に方法はありません。
#参考
Bのセルに「0000"B-"0」とユーザー定義を設定し12341と記入させ、
Aのセルに「0000"A-"0」と異なるユーザー定義を設定し12342を記入させる、
そんなウマシカ的方法でも「出来ます」
>無理なのでしょうか
スキルさえあれば、出来ます。
操作例:
A列に00000-0のユーザー定義の書式設定を取り付けておく
シート名タブを右クリックしてコードの表示を選ぶ
現れたシートに下記をコピー貼り付ける
private sub worksheet_change(byval Target as excel.range)
dim h as range
on error resume next
for each h in application.intersect(target, range("A:A")) ’実際に合わせて修正
if h <> "" then
h.numberformat = "00000-0"
if application.istext(h) then
application.enableevents = false
h = application.replace(h, len(h), 0, "-")
application.enableevents = true
end if
end if
next
end sub
ファイルメニューから終了してエクセルに戻る
A列に123451や1234A1とデータを記入する。
手でやりますとお話ししたことを、代わりに機械がやってくれます。
この回答への補足
わぁ、ありがとうございます!
実際はもう少し複雑で「1234511」で「12345A1-1」となるユーザー定義
「00000"A"0"-"0」を使っていて
「12345B1」で「12345AB-1」にしたいのですが、
先のコードでどこを修正したらよろしいでしょうか?
スキルがないので、何度もすみません。
No.2
- 回答日時:
こんにちわ。
状況がよく分かっていないので的外れな回答になっているかもしれません。
入力された内容を文字列として認識するには
「@」
を使用します。
現在、手元に確認できる環境がないため憶測での回答になってしまい申し訳ないのですが
「ユーザー定義」->「種類」に
「@@@"-1"」
のような形式で可能ではないでしょうか。
意味合い的には文字列の末尾に「-1」を付加している状態です。ダブルクォーテーションで囲まれた文字は、文字列として認識できるようになります。
ご回答ありがとうございます。
「@@@"-1"」では「1234B11234B11234B1-1」となります。
「1234B1」で「1234B-1」にしたり「1234A2」で「1234A-2」したりもしたいのでだめです。
どうやらできないっぽいです。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンからL判で印刷する方法
-
Excelのロゴマーク
-
弥生の青色申告オンライン を初...
-
Googleスプレッドシートで合計...
-
エクセルの関数について。
-
事業主の収支の記録はどうやって?
-
excel初心者です。 セルの色変...
-
おすすめの青色申告対応ソフト...
-
弥生会計を購入したいのですが...
-
弥生会計ソフト使ってるかたに...
-
データって意味あるの? まとめ...
-
確定申告エラーコード
-
弥生会計ソフトで、・競馬・競...
-
弥生会計青色申告ソフトのかん...
-
会計ソフト導入時期について
-
給料日の締め日支払い日設定に...
-
会計ソフトとExcel管理の比較に...
-
テレワークを久しぶりにやりま...
-
弥生会計のクラウドで収入をど...
-
ExcelからGoogleのスプレッドシ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
背景色の有無を判断をして別の...
-
エクセルのユーザー定義で
-
B列にA列の数字をかけた数字を...
-
VBA 動作の後、動作した行のA...
-
EXCELで2つの数値のうち大きい...
-
2つのエクセルのデータを同じよ...
-
PowerPointで表の1つの列だけ...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
エクセルでオートフィルタのボ...
-
Excelで半角の文字を含むセルを...
-
【画像あり】【関数】指定した...
-
エクセル(勝手に太字になる)
-
エクセルで時刻(8:00~20:00)...
-
エクセルで、2種類のデータを...
-
エクセルで最初のスペースまで...
-
エクセルのオートフィルタで最...
-
Excel、市から登録している住所...
-
エクセルの項目軸を左寄せにしたい
-
エクセルのセル内の文字の一部...
おすすめ情報