• 締切済み

EXCEL VBA のREPLACE関数で以下の使い方をすると、型が違

EXCEL VBA のREPLACE関数で以下の使い方をすると、型が違います!とエラーになります。どこがちがうのでしょうか? D列に図書分類が入っていますが、1文字目の分類種別(F、M、N、P、B,Y)が大文字で入っている場合は小文字に置き換えたいのです。 dim W as string for i=0 to 15 W = Range("D" & 3 + i) 分類 = Left(W, 1) Select Case 分類 Case "F" Range("D" & 3 + i) = Replace(W, 1, 1, "F") Case "M" Range("D" & 3 + i) = Replace(W, 1, 1, "M") Case "N" Range("D" & 3 + i) = Replace(W, 1, 1, "N") Case "P" Range("D" & 3 + i) = Replace(W, 1, 1, "P") Case "B" Range("D" & 3 + i) = Replace(W, 1, 1, "B") Case "Y" Range("D" & 3 + i) = Replace(W, 1, 1, "Y") End Select next

みんなの回答

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.6

ANo4です ちなみにHELPは該当文字列を選択してF1キーで呼び出します。 今回の場合Replaceを選択してF1キーです。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.5

ANo4です 全角を半角にでしたね、読み飛ばしてました。 いまの文を使うなら Range("D" & 3 + i) = Replace(W, "F", "F", 1, 1) ですね。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.4

> 先頭文字だけ変換したいのです。 VBAのヘルプより Replace(expression, find, replace[, start[, count[, compare]]]) Replace 関数の構文は、次の名前付き引数から構成されます。 指定項目 説明 expression 必ず指定します。置換する文字列を含む文字列式 を指定します。 find 必ず指定します。検索する文字列を指定します。 replace 必ず指定します。置換する文字列を指定します。 start 省略可能です。引数 expression 内の内部文字列の検索開始位置を指定します。この引数を省略すると、1 が使用されます。. count 省略可能です。置換する文字列数を指定します。この引数を省略すると、既定値の -1 が使用され、すべての候補が置換されます。 compare 省略可能です。文字列式を評価するときに使用する文字列比較のモードを表す数値を指定します。設定する値については、次の「設定値」を参照してください。 Range("D" & 3 + i) = Replace(W, "F", "f", 1, 1) ですね。 > 簡単な質問をしますが、HELPで関数を調べる場合、マクロ処理の画面でするのですか?調べ方を教えてください。 マクロの画面でHELPを調べないとマクロのHELP(VBAのメソッドなど)が表示されずにワークシート関数のHELPが出てしまいますので間違った記述をすることになります。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

>mid,strconv命令はわかりますが、vbnarrowを知りません。 んーと。有り体に言えば,それでは「命令を判っている」とは全く言えません。 勉強のやり方:次の通りに練習しましょう。 VBE画面でオブジェクトブラウザを開く StrConvを検索する 見つけたらオブジェクトブラウザの?ボタンをクリックする StrConv関数のヘルプが現れるので,熟読する。たとえば関数の書式(引数の書き順),引数の所定の定数の種類,内容,そして使用例を良く見る。 ----Excel2003VBAのヘルプより抜粋---------- 構文 StrConv(string, conversion, LCID) 名前付き引数 conversion には、次のいずれかの定数または値を指定します。 定数     内容 vbNarrow 文字列内の全角文字 (2 バイト) を半角文字 (1 バイト) に変換します。 使用例 次の例は、StrConv 関数を使って、Unicode 文字列をANSI 文字列に変換します。 Dim i As Long Dim x() As Byte x = StrConv("ABCDEFG", vbFromUnicode) ' 文字列を変換します。 For i = 0 To UBound(x) Debug.Print x(i) Next -----ここまで----------- 同様に。 >私の命令のどこがよくないか指摘してほしいです こちらも上述同様,Replace関数のヘルプをオブジェクトブラウザを手がかりに呼び出し,構文と使用例を見ながら作成します。 ただしこちらは探してみると,複数種類のReplaceがある事が判ります。 1.rangeオブジェクトを対照にしたreplace 2.StringsのReplace 3.WorksheetFunctionのReplace 1については置換の操作の命令なので,今回は関係有りません。 そしてヘルプを確認してみると,あなたが使ってみたのは3番のreplace関数であることが判ります。こちらはエクセルのワークシート関数をVBAで呼び出して利用する方法です。その場合,こちらのreplace関数のヘルプの使用例にあるように 結果 = application.worksheetfunction.replace(arg1, arg2, arg3, arg4) と書かなければいけません。 2番は3番と違い,ExcelVBA自体に実装されたreplace関数です。2番についてもヘルプを出してみると,構文から3番と全く違うことが判ります。 結果 = replace(対象の文字列全体,検索文字列,入れ替える文字列)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

ん? 半角の小文字: abcde 半角の大文字: ABCDE 全角の大文字: ABCDE sub サンプル()  dim w as string  for i = 3 to 18   w = cells(i, "D")   mid(w, 1, 1) = strconv(left(w, 1), vbnarrow)   range("D" & i) = w  next i end sub

Dory-R
質問者

補足

失礼しました。大文字、小文字ではなく全角、半角の間違いでした。 回答で mid,strconv命令はわかりますが、vbnarrowを知りません。 教えてほしいのと、私の命令のどこがよくないか指摘してほしいです。 勝手なおねがいですみません。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

Range("D" & 3 + i) = Replace(W, "F", "f") にしてください。詳しくはHELPでReplaceを調べてください。

Dory-R
質問者

補足

(大文字、小文字ではなく全角、半角の間違いでした。) 私の参考本では REPLACE("[文字列]",[開始位置],[文字数],["置換文字列"]) となっています。 そちらの処理ですと、該当セルに"F"があればすべて"f"に置き換えてしまうのでは? 先頭文字だけ変換したいのです。 簡単な質問をしますが、HELPで関数を調べる場合、マクロ処理の画面でするのですか?調べ方を教えてください。

関連するQ&A