Excelで見積書兼製造指示書を作成しています。
今までは別のフォーマットでしたが、内容がほぼ同様のものなので、
ドロップダウンで主題(「見積書」と「製造指示書」)を変更できるようにしています。
(見積書作成時には条件付き書式で、入力必須項目のセルに目印として背景色がつくように
設定しています)
ただし、この見積書フォーマットは別のプログラムへの入力指示のためのもので、
見積書には品名などに入力文字数制限があります。
そのため、見積書は英数カナ文字は半角で作成します。
(別プログラム入力時に、入力文字数制限を気にすることなくコピペ出来るようにしたいです)
製造指示書は、このフォーマットで完結のため入力文字数制限はなく、
英数カナ文字は全角となります。
ドロップダウンで主題を変更すると、特定の場所の英数カナ文字が、全角または半角へ変換
できるような仕組みはありますでしょうか。
(はじめが全角、半角どちらでも構いません)
ご教示宜しくお願いいたします。
フォーマットを分けて、一方の特定の場所を全角で打っても、別シートのもう一方は
関数などで半角に変換される、というようなこともできそうですが、その方法は避けます。
入力者が私ではなく、別の人間であること、そのため複数フォーマットがあれば入力時に
多少の混乱が生じること、そもそもこれらのフォーマットを統一しようという取り組みを
行っている最中のため、またふたつに分けるのは方針に反していること、などの理由があります。
No.3ベストアンサー
- 回答日時:
#1の回答者です。
◯フォーマットを統一しよう
というのは、
一般的には、ふつうはWordの領域の質問ですが、「全角英数文字を半角に、半角カナを全角にする」というところに落ち着くと先読みしてつくってあります。
そうすると、Excel ではとてもややこしい問題になると同時に、半角カタカナを全角にする時に、失敗が起こるのです。半角カタカナは、文字変換関数は、必ず、まとめてあげない正しく変換されないのです。
半角->全角
sCharPattern = StrConv("[!-/A-Zヲァ-ン゛゜\d]+", vbNarrow)
sCharPattern = StrConv("[ヲァ-ン゛゜]+", vbNarrow)
とすれば、カタカナだけの対象になります。
逆に
全角->半角 でカタカナを抜くのでしたら、
dCharPattern = "[A-Za-z0-9]+"
とすればよいです。
ちなみに、Wordの方法
http://office-qa.com/Word/wd146.htm
No.2
- 回答日時:
とりあえず、こんなところから勉強を始めたら良いと思います。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Dim p As Variant
If Target.Address <> "$B$1" Then Exit Sub
If Target.Value = "見積書" Then
p = vbWide
Else
p = vbNarrow
End If
For Each r In Range("A1,A4")
r.Value = StrConv(r.Value, p)
Next r
End Sub
No.1
- 回答日時:
数ヶ月前、同じような質問がありましたが、それ以上に難しい点があります。
Excelでは、[英数カナ文字] 全角ー半角 全部統一というのは少し無理があります。
通常は、数字は半角、英字は半角、カタカナは全角などという一般的な基準がありますが、それを無視してということになってしまいます。
>ドロップダウンで主題を変更すると、特定の場所の英数カナ文字が、全角または半角へ変換できるような仕組み
フォームコントロールのドロップダウンをシートに貼り付けて、コントロールの入力範囲を適当に決めて、
半角
全角
にしてください。必ず半角を上にしてください。
>フォーマットを統一しよう
ということで、後でも変えられるように、正規表現で書かれています。
たぶん、何かの支障が発生した時に、私はサポートできないと思いますので、注意点を書いておきます。
sCharPattern = StrConv("[!-/A-Zヲァ-ン゛゜\d]+", vbNarrow)
dCharPattern = "[A-Za-zァ-ン0-9]+"
sは、single 半角、dは、double 全角のイニシャルです。
[ ] 内に書き加えれば、かなり込み入った内容でも、半角・全角は変えられます。
Wordのコード表なども役に経ちます。ただ、今ははっきりしませんが、この並びが、UNICODE並びのことがありますので、その点を考慮しておいたほうがよいでしょう。
'//
Sub ドロップ1_Change()
Dim dps As Object
Dim i As Long
Dim lst As Variant
Set dps = ActiveSheet.DropDowns(1)
i = dps.Value
'半角-1, 全角-2
With Range(dps.ListFillRange)
.Offset(, 1).ClearContents
.Cells(i, 2).Value = "◎"
End With
Call WorksheetChange_Db_Sn(i)
End Sub
Sub WorksheetChange_Db_Sn(ByVal iflg As Long)
Dim Rng As Range
Dim flg As Boolean
Dim sCharPattern As String
Dim dCharPattern As String
Dim RegEx As Object
Dim Ms, m
Dim buf As String
Dim myPattern As String
Set RegEx = CreateObject("VBScript.RegExp")
sCharPattern = StrConv("[!-/A-Zヲァ-ン゛゜\d]+", vbNarrow) '半角
dCharPattern = "[A-Za-zァ-ン0-9]+" '全角
myPattern = IIf(iflg - 1, sCharPattern, dCharPattern)
With RegEx
.Global = True: .IgnoreCase = True: .MultiLine = True
.Pattern = "(" & myPattern & ")"
End With
With ActiveSheet
On Error Resume Next
Set Rng = .UsedRange.SpecialCells(xlCellTypeConstants, 23)
If Err.Number() <> 0 Then
flg = True
ElseIf Application.CountA(Rng) < 5 Then '4文字以下は検索しない
flg = True
Else
End If
If flg Then
MsgBox "現在のシートには対象になる文字列は見つかりません", vbExclamation
Exit Sub
End If
On Error GoTo 0
For Each c In Rng
buf = ""
buf = c.Value
On Error Resume Next
Set Ms = Nothing
Set Ms = RegEx.Execute(buf)
On Error GoTo 0
If Not Ms Is Nothing Then
If Ms.Count > 0 Then
For Each n In Ms
If iflg - 1 = 0 Then
n_a = StrConv(n, vbNarrow)
Else
n_a = StrConv(n, vbWide)
End If
buf = Replace(buf, n, n_a, , 1)
Next
End If
If IsNumeric(StrConv(buf, vbNarrow)) Then
If iflg = 2 Then
c.Value = "'" & buf '数字が半角に戻るのを防ぐ
ElseIf iflg = 1 Then
c.Value = CDbl(buf)
End If
Else
c.Value = buf
End If
End If
Next
End With
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの警告について
-
タイムスタンプとテキストから...
-
シートの情報を別のシートへま...
-
マクロの処理が遅くなった
-
Excelでの文字色
-
ワークシートに出現したこの画...
-
EXCELの散布図で日付が1900年に...
-
OFFSET関数を使用したいのです...
-
エクセルでファイルの最終更新...
-
エクセルの文字が途中から消える
-
エクセルデーターから必要な項...
-
Excel 大小比較演算子による「...
-
SUBTOTALは、参照された数字で...
-
エクセルの数式バーのフォント...
-
エクセルの「条件付き書式」を...
-
Excelについて教えてください。...
-
エクセルVBA 月の中で、月~土...
-
Excelの数字の前に入っている空...
-
Excelの関数について このよう...
-
セルの数を求めたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
Excelで数値を時間数に変換する...
-
エクセルの数式バーのフォント...
-
エクセルで数字の組み合わせを...
-
エクセルを使用して、円周率を...
-
Excelで特定の文字列が含まれて...
-
Excel 対象のセルに入力が無い...
-
任意の値が存在する行に名前を...
-
エクセルでファイルの最終更新...
-
index関数の説明をお願いします。
-
条件付き書式でやりたいのですが
-
重複しない値を取り出したい
-
【ExcelVBA】UTF-8(BOM無)でC...
-
【マクロ】マクロが割当てされ...
-
エクセル IF計算式?でしょうか?
-
エクセルで曜日を入れたい
-
表中の指定した条件の文字列を...
-
【Excel】版が同じ事を示す番号...
-
EXCELの散布図で日付が1900年に...
-
Excelについて。Excelに縦1列に...
おすすめ情報