• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:excelを使用したVBAの問題に関する質問です。)

Excel VBAの問題に関する質問

このQ&Aのポイント
  • Excel VBAの問題で使われる()の意味とは?
  • 文中の「-1」の意味とは?
  • 条件式での「-1」の理由は?

質問者が選んだベストアンサー

  • ベストアンサー
  • mdmp2
  • ベストアンサー率55% (438/787)
回答No.1

Instr(Cells(i,1),"(") は、 Cells(i,1) に文字列が入っており、その中にある ( の位置を表します。 Cells(i,1) にABCDE(12345) という文字列が入っているものとすると、  ( の位置は左から6番目なので、 6という数値を返します。 "(" と、"" でくくるのは文字列であることを表します。 くくらないと、変数とみなされます。 Instr(Cells(i,1),"C") とすると、Cは3番めにありますので3という数値を返します。 Instr(Cells(i,1),C) とすると、Cは変数になりますので、例えばCの値が"C" であれば、同じ結果になります。どこかでC の値を定義しておく必要があります。 なお、( は変数としては使えないでInstr(Cells(i,1),() とすると エラーになります。 Left(Cells(i, 1), InStr(Cells(i, 1), "(") - 1) は、Cells(i,1) に入っている文字列の左から "(" がある場所の数値から一つ引いた数だけ抽出します。 Cells(i,1)="青森県(あおもり)" の場合、"("は4番目にありますので、左から3文字抽出されますので、"青森県" が抽出されます。 -1 がないと、"青森県(" まで抽出され、余分な "(" が付きます。 Left(strPref, Len(strPref) - 1) これは、県名の文字列の左から県名の文字数から1を引いた数の文字列を返します。 県名が"青森県"なら、抽出される文字列は"青森"となります。 -1 は都道府県名から"都","道","府","県" と取り除くためです。

jl777
質問者

お礼

大変に分かりやすいご説明、 ありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

Instr 関数に関する質問ばかりじゃないか。 Googleででも、「VBA InStr関数」で照会して、解説例に基づいた解説がある記事を読むこと。そんなこともしてないではね。 VBA プログラムをやるなら、VBAの解説した書籍数冊と、WEB時事の活用は欠かせないよ。 この辺(関数=単機能=定目的のものがほとんど)で質問しているようでは、ロジックなどの勉強はどうするのかな。 ーー Googleで「Instr関数」で照会。 例えば http://officetanaka.net/excel/vba/function/InStr.htm ある文字列があって、「(」=左括弧が最初に現れるまでの文字列の左の部分を取り出したいとき、括弧を見つけた位置の1つ前の文字までをとらえるためー1するのだ。 関数名は、文字列(String)の中で(In)(位置を見つける、という意味かな。昔のMSBasic時代からある有名な関数です。 引数に探索開始位置を指示できるので、2つめ以後の該当を見つけるのにも使えて便利な関数です。 例題 A1セルに aadf(aw)ghr と入れて Sub test01() x = Range("A1") p1 = InStr(1, x, "(") MsgBox p1 p2 = InStr(p1 + 1, x, ")") MsgBox p2 y = Mid(x, p1 + 1, p2 - p1 - 1) MsgBox y End Sub を実行で aw が出る。括弧内の文字列を抜きだす手法。