Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


273 / 74462 ←次へ | 前へ→

【79832】Re:セルの関数で使用している文字列を半角にしたい
回答  亀マスター  - 18/4/24(火) 20:50 -

引用なし
パスワード
   マナさんのおっしゃるように、エラーの可能性はあります。
特に、If関数などは条件が崩れると思いますよ。

それでもというなら、私なら以下のようにします。
(もっといい方法もあるかもしれませんが)

関数の中で文字列はダブルクォーテーションで囲んでいるはずなので、
これをVBAのInStrで検出し、2つのダブルクォーテーションで囲まれた
範囲だけを対象にStrConvで変換する・・・という考え方です。
これなら、参照しているシート名などはそのまま残ると思います。

Sub test()

Dim Rng As Range
Dim Pos1 As Long, Pos2 As Long
Dim tempStr As String, halfStr As String

For Each Rng In Selection
  '式があるかどうかを確認
  If Rng.HasFormula Then
    tempStr = Rng.FormulaLocal
    Pos2 = 0
    Do
      'ダブルクォーテーションの位置を検索
      Pos1 = InStr(Pos2 + 1, tempStr, """")
      '見つからなければループを抜ける
      If Pos1 = 0 Then
        Exit Do
      End If
      '次のダブルクォーテーションの位置を検索
      Pos2 = InStr(Pos1 + 1, tempStr, """")
      'ダブルクォーテーションで挟まれた文字列を抜き出し、半角に変換
      halfStr = StrConv(Mid(tempStr, Pos1 + 1, Pos2 - Pos1 - 1), vbNarrow)
      '変換後の文字列を元の位置に差し込む
      tempStr = Mid(tempStr, 1, Pos1) & halfStr & Mid(tempStr, Pos2)
    Loop  '次の位置のダブルクォーテーションが見つからなくなるまでループ
    '最終的に得られた数式を元のセルに戻す
    Rng.FormulaLocal = tempStr
  End If
Next Rng

End Sub

61 hits

【79828】セルの関数で使用している文字列を半角にしたい りか 18/4/24(火) 11:52 質問[未読]
【79831】Re:セルの関数で使用している文字列を半角... マナ 18/4/24(火) 18:57 発言[未読]
【79832】Re:セルの関数で使用している文字列を半角... 亀マスター 18/4/24(火) 20:50 回答[未読]
【79855】Re:セルの関数で使用している文字列を半角... γ 18/4/30(月) 9:49 発言[未読]

273 / 74462 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free