vbaでのプログラミングに関してお聞きしたいことがあります!
変数a に年度("H○○")
を格納しています。

そこで【変数aの値が"H29"以降の時】という条件をIf文で記述したいのですが全く上手く行きません。

私は【変数aの値が"H29"以降の時】を
If a >= "H29" Then…
のように記述していました。

どなたかご教授お願い致します。

A 回答 (2件)

以下の様にして変数aの文字を数値に変換して下さい。


Replace()は文字を置換する関数(ここでは"H"を空文字""に置換している、"H29"→"29")
CLngは文字を明示的に数値化する関数(型はLong、"29"→29)


Sub Sample()
  Dim a As String
  a = "H29"
  
  If CLng(Replace(a, "H", "")) >= 29 Then
    MsgBox "TRUE"
  Else
    MsgBox "FALSE"
  End If
End Sub
    • good
    • 0
この回答へのお礼

サンプルコードまでご丁寧にありがとうございます!

お礼日時:2017/05/10 20:03

変数にはデータ型というのがあります。


整数型、実数型、文字列型、日付型など。

比較演算子(>=)などを使うのであれば、数値型か、日付型になります。

最初に、
Dim year AS Integer
などと宣言して、

year = 29
など、数値だけを代入してみてください。

"H29"を格納してしまうと、何を比較して以上とか以下とか言うのか、機械には分からない訳です。

データ型は基本なので、しっかり学ばれておくことをお勧めします。
型の宣言をしなくて良いタイプの言語を学ばれていた方でしょうか??
    • good
    • 1
この回答へのお礼

ご丁寧ねありがとうございます!
改めてデータ型の基本を復習します!

お礼日時:2017/05/10 20:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QエクセルVBA If Then 構文でOR条件の場合のVBA記述方法は?

仮にセル("A1")が空白か Falseの場合は Then 以下のことをする。
と書きたいのですが

If Sheets("Sheet1").Range("A1")="" Then
~略

If Sheets("Sheet1").Range("A1")=False Then
~略

と別々に記載する方法しかわかりません。

ワークシート関数のようにIF(OR(A1="",A1=False),~略)というようにまとめて記述するにはどう書けばいいのでしょうか?

AND条件の場合も教えてください。よろしくお願いします。

Aベストアンサー

If Sheets("Sheet1").Range("A1")="" Or Sheets("Sheet1").Range("A1")=False Then

でokですヨ。ちなみにAndの場合は、上記のOrの箇所をAndに変更するだけです。

QエクセルVBA 変数Aと変数Bの組み合わせに対応する値を返すコード

ワークシート上に次の表があり,この表をもとにして,変数A(0~4)と変数B(0~4)の組み合わせに対応するC列の値を返すコードは,どう書いたらよいでしょうか。
 例えば,変数Aのセルに●(4),変数Bのセルに▲(0)と入力したら,値のセルに■(5)と表示させたいのです。
 どなたか教えていただけませんか。

A列  B列  C列
 4   0   5
 3   1   4
 3   0   5
 2   2   3
 2   1   4
 2   0   4
 1   3   2
 1   2   2
 1   1   3
 1   0   3
 0   4   1
 0   3   1
 0   2   2
 0   1   3
 0   0   3

変数A:●
変数B:▲
値:■

Aベストアンサー

こんにちは。KenKen_SP です。

VBA を使わなくてもワークシート関数の SUMPRODUCT で十分な気がしますが。
Sheet1 の A1:C15 にデータがあるとしたらこんな感じで。

  =SUMPRODUCT((A1:A15=4)*(B1:B15=0)*(C1:C15))

以下の VBA でも SUMPRODUCT 関数をそのまま使っているだけです。

Sub Sample()

  Dim 変数A As Long
  Dim 変数B As Long
  Dim 値  As Long
  
  変数A = 4
  変数B = 0
  
  strArg1 = "(Sheet1!A1:A15=" & 変数A & ")"
  strArg2 = "(Sheet1!B1:B15=" & 変数B & ")"
  strArg3 = "(Sheet1!C1:C15)"
  
  strFormula = "=SumProduct(" _
        & strArg1 & "*" _
        & strArg2 & "*" _
        & strArg3 & ")"
  値 = Evaluate(strFormula) '※
  MsgBox 値

End Sub

ほかには、ループ処理で一行ずつ調べる方法、Match 関数で調べる方法など
色々考えられますね。

...この回答はトリッキーな部類かもしれません。

こんにちは。KenKen_SP です。

VBA を使わなくてもワークシート関数の SUMPRODUCT で十分な気がしますが。
Sheet1 の A1:C15 にデータがあるとしたらこんな感じで。

  =SUMPRODUCT((A1:A15=4)*(B1:B15=0)*(C1:C15))

以下の VBA でも SUMPRODUCT 関数をそのまま使っているだけです。

Sub Sample()

  Dim 変数A As Long
  Dim 変数B As Long
  Dim 値  As Long
  
  変数A = 4
  変数B = 0
  
  strArg1 = "(Sheet1!A1:A15=" & 変数A & ")"
  strArg2 = "(Sheet1!B1:...続きを読む

QEXCEL2002で,IF thenの関数式を使い、値が「空白」なら、もう一方の関数式を代わりに代入する方法

 EXCEL2002で,IF thenの関数式を使い、値が「空白」なら、もう一方の関数式を代わりに代入する方法を教えて下さい!

(1) 通常なら、AA5というセルに、
=RSS|'1332.T'!現在値
 という関数式が入っているとします。
(2) ここで、元々上記式が入るAA5セルの値が「空白」(⇒決して「0」ではない。ことに留意して下さい。)であるなら、もうひとつ用意した
 =RSS|'1332.T'!○○○
を文字通り、選択的に用い、IF thenの関数式を使って、その値を表示させる。
 どちらの式も命令文の一文として、勿論、AA5に入っています。
 即ち、間違っていると思うのですが、数式のイメージとしては、
 IF =RSS|'1332.T'!現在値=「 」 then =RSS|'1332.T'!○○○
(3)こうしたIF thenの関数式の”正しい式”を教えて頂けないでしょうか? 
 何卒、宜しく御願いします。

Aベストアンサー

(1)>Range("AA5").Formula⇒Range("AA5:AA229").Formulaに変更すれば
あくまでAA5が空白でいいという前提ならOKですが
たぶんAA6に対しても、となってくるのでは?そうなるとFor~Next使わないとたぶん無理
(2)私もRSSは知らなかったのですが、テストしてみたら何となく外部参照しているくらいしか分からなかったんで…
>返される値が、空白
どゆこと?関数が入力されているわけではないのですか?
それともマクロで数式=.Valueとなっているのでしょうか?
>前の条件式、RSS|'1332.T'!現在値 と比較してみると、唯一の違い は、「○○○」の部分でしかないので、
 「○○○」以前の数式「RSS|'1332.T'!」を上手に「置換」を使って、「入力式」を普遍化できないでしょうか?
言っていることがいまいち…

Qエクセルで、A2セルの値を同シート内(A5以降のA列)で検索し、該当セルにジャンプする方法はありますか?

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1417540469

上記のページと同様の質問なのですが、
ベストアンサーに選ばれている回答は別シートにジャンプですが、
同シートでのジャンプの方法はありますでしょうか。

どなたかご教示いただけると助かります。
何卒よろしくお願いいたします。

Aベストアンサー

とりあえずはご提示いただいた回答で
>Set Ws2 = Sheets("Sheet2")

 Set Ws2 = ActiveSheet
にするだけで良いと思います

私ならこんなマクロにします。マクロはシート名タブ右クリック→コードの表示で開く画面に貼り付けてください。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim trg As Range
 If Target.Address = "$A$2" Then  
  Set trg = Range(Cells(5, "A"), Cells(65536, "A")).Find(what:=Range("A2").Value _
    , LookIn:=xlValues, Lookat:=xlWhole)
  If Not trg Is Nothing Then
   trg.Select
  End If
 End If
End Sub

Q#If Then ~ #Else ~ #End If(エクセルVBA)

#If Then ~ #Else ~ #End If
って何ですか?
また、VBAのヘルプで検索する方法ってどうすればいいのですか?
どなたか?宜しくお願い致します。

Aベストアンサー

単純にヘルプのコピペです。

> #If Then ~ #Else ~ #End If
式の値に基づいて、条件付きのコンパイルを行います。

ヘルプの使用方法であれば、
VBAのコードを打つ画面で、#Ifの#またはIの後ろで「F1(ファンクション1)」を入力ください。

そうすると、参照先の先が自動的に出てきます。

今更聞きにくいヘルプの使用法ですね・・・。

HLPファイルの時は簡単に検索できたんですけどね。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報