• ベストアンサー

列の存在を確認する

お世話になります Excel2000VBAで For i = 0 to 5   If 列が存在するか(ArrayTmp.Item(i)) Then     Msgbox i & "列目は存在します"   Else     Msgbox i & "列目は存在しません"   End If Next i 以上のように該当する列が存在するかの確認をすることは可能でしょうか? Arraytmpの列数は不定なのでチェックを行いたいのですが

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

  • ベストアンサー
回答No.1

配列の列数を確認したいということでしょうか? もしそうならば UBound 関数で上限の要素番号を調べられます。

forgedcode
質問者

補足

確かに列数が分かれば直接的ではないですが問題ないです ただこの場合どのようにUboundを記述すればよろしいのでしょうか? 思い当たる限り書いたのですがどれも通りませんでした

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

sugao_chibiです。お役に立てず申し訳ないです。 >構文はこれでOkだとは思うのですが、ArrayTmpがoracleから返って >きたカーソル型(VBA側ではObject型で宣言してます)なので 配列の操作上はObject型でも問題ないと思いますけどね。 他の方が答えてくれるかもしれませんので、実際に発生するエラーの内容を記述してみてはどうでしょうか(配列の領域外をアクセス?)。

forgedcode
質問者

お礼

sugao_chibi様 とりあえずこの前の段階で回避策が見つかりましたのでそちらで運用してみます。ありがとうございました

forgedcode
質問者

補足

sugao_chibi様 とんでもこざいません、私の考えが間違ってないのが確認できましたので。 言葉がかなり足りなかったかもしれませんが、「OO4Oを使ったバインド配列の大きさの取得」というのが目的になると思います。 TmporaDb.Parameters.Add "PARA1", 0, 2    ''OUT,CURSOR strSQL = "BEGIN TESTPackage1.TEST1(:PARA1); END;" TmporaDb.DbExecuteSQL (strSQL) Set ArrayTmp = TmporaDb.Parameters("PARA1").Value GridStatus.Rows = TmporaDb.Parameters("PARA1").Value \ 8 ''<<ここ これで列数を取得できるようなのですが、この「GridStatus」という変数が一体何型で宣言すればいいのか書いてなくて・・・ 私の考えでArrayTmpにセットされているのでArrayTmpにVB構文で呼び出せると思ったのですが

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

>確かに列数が分かれば直接的ではないですが問題ないです >ただこの場合どのようにUboundを記述すればよろしいのでしょうか? for i=0 to UBound(ArrayTmp.Item)-1  Msgbox i & "列目は存在します" next i 配列が動的に確保される場合で、例えば2個しか確保されていないのに for i=0 to 5 とやると例外が発生してしまいます。 最初にご自分で書かれた確認の方法は誤りですね(実行時に例外が発生します)。

forgedcode
質問者

補足

sugao_chib様ご回答ありがとうございます ご指摘のとおりあの形ではエラーが出てしまいます ただIsMissingのような物がないかな?と思いそう記述しました さてsugao_chib様が記述されたUboundですがやはりこの記述ではエラーが出てしまいます。 構文はこれでOkだとは思うのですが、ArrayTmpがoracleから返ってきたカーソル型(VBA側ではObject型で宣言してます)なので 普通のやり方では無理なのかな、と考えています

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

列番号例えばCはC列を削除しても、もとの右隣列がC列として現れるのではないでしょうか。 何のことを質問しているか判らない。私が愚かなのかな。 (1)その列が非表示の列か (2)列の見出し(例えば第1行)で、例えば「住所」という文字列、がある列か などなら判りますが。

forgedcode
質問者

補足

具体的になりますが、VBからOracleのストアドをコールして その戻り値にカーソル型があるのですが、その内容が場合によって 列が増えたり減ったりするというこです。 実際にはArrayTmp.Item(9)のこともあればArrayTmp.Item(2)までしかないこともあるので(上限は決まっていますが) 上限までループをまわしてその要素(列)があるかどうかチェックしたいのです

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBSでExcelのオープン確認

    VBSCRIPTでエクセルに書き込むものを作っているのですが・・・ エクセルが開きっぱなしの場合、同じシートが開いて書き込めなかったりなど有りその対策を考えています。 もし開いていたらMsgBoxを出して終了させてしまおうかと思うのですがエクセルが開いているかどうか確認できません・・・ どのようにしたらよいでしょうか? wbCount = objExcel.Workbooks.Count msgbox wbCount myFlag = False for i = 1 to wbCount if objExcel.Workbooks(i).Name = strFilename then myFlag = True Exit for end if next if myFlag = True then msgBox "Open" else msgBox "not Open" end if

  • excel VBAの文字列設定

    VBAで繰り返し作業を行っているのですが変数と文字列の組み合わせの設定に困っています。 for ~next(変数x)で繰り返しを行い medx の文字列を検索したいのですがうまくいきません。 疑問の部分は以下の範囲です 定義 x, y, i, ro, li as integer med1~medx までそれぞれ別の文字列(ex. med1= a med2 = b・・・ 統一性はないです) VBA部分 If y > 1 Then For x = 1 To y - 1 For i = 1 To 13 ←sheet数 For ro = 1 To 150 ←行 For li = 1 To 200 ←列 Worksheets("sheet" & i).Select If InStr(Cells(ro, li), "med" & x) > 0 Then ←疑問部分 med1、med2・・・を含むかどうか Cells(ro, li).Interior.ColorIndex = 3 Else End If Next Next Next Next else end if 上のように書くと"med1"を含むかどうがになってしまい、"a"を含むかどうかになりません。 わかりにくいかもしれませんが回答どうぞお願いします。

  • 動的配列が存在(要素が有る)か否かを判定できますか?

    VBAで、「For ループが初期化されていません」エラーが発生します。 動的配列が要素0の時に発生するようです。 動的配列の要素が生成された場合だけ、Forループしたいのですが、 どうやって判定すればよいのでしょうか? ------------------------------- Dim 配列() As Integer Dim i As Integer i = 0 If (i < 0) Then ' 本当は真になったり偽になったり ReDim 配列(0 To i) 配列(i) = a + b i = i + 1 End If '' if ★★★ then '' 配列が有るか確認 For Each c In 配列 MsgBox c Next '' end if -------------------------------

  • Excel VBA の if elseについて

     以下は与えられた自然数が素数であるかどうかを判定する、Excel VBA による素朴なコードです。  自然数が2 とそれ以上の場合で処理を分けていますが、5 行目のelseで   対応するifがないという というコンパイルエラーが出ます。私はプログラミング言語は、Pascal しか経験がなく、Pascal の場合 5 行目の else から後の処理したい複数の構文を begin end で囲めば問題なく動きます。  Excel VBA で同じ処理をさせるにはどうしたらいいのでしょうか?  Worksheets("素数").Activate  '"素数"シートをアクティブにする  Flg = 0  Target = Range("D5").Value  if Target = 2 then MsgBox ("2 は素数です。")  else  'else 対応するifがないというエラーが出る  'begin ・・・・・ Pascalの場合    K = Int(Target / 2)    ' 2 以外の素数は奇数なので偶数で割ることを確認する必要はない。    For I = 3 To K Step 2     If Target Mod I = 0 Then      Flg = 1      Exit For     End If    Next I       Snum = Format(Target)    If Flg = 0 Then     MsgBox (Snum + " は素数です。")    Else     MsgBox (Snum + " は素数ではありません。")    End If  'end ・・・・・ Pascalの場合  End If

  • FileSearchがエクセル2007で使えなくなって困っています。

    2003では普通に使えたのですが、2007で使うためにはどのように変えればいいのでしょうか?途方にくれているのでVBAに詳しい方ご教授ください。処理文で回答頂けるとうれしいです。 Public Sub p_更新() For i = 1 To 100: gwKillFL(i) = "": Next i With Application.FileSearch .LookIn = gAAFLD .SearchSubFolders = True .Filename = "*T" & Format(gBB, "00") & ".txt" .FileType = msoFileTypeAllFiles If .Execute(SortBy:=msoSortByFileName, _ SortOrder:=msoSortOrderAscending) > 0 Then For i = 1 To .FoundFiles.Count gwKillFL(i) = .FoundFiles(i) Call p_ReadData(.FoundFiles(i)) Next i For i = 1 To .FoundFiles.Count If gwKillFL(i) <> "" Then Kill gwKillFL(i) End If Next i If gMenu1 > 0 Then Range("A2").Select MsgBox "更新", vbOKOnly, "確認" End If Else If gMenu1 > 0 Then MsgBox "更新ファイルなし。", vbOKOnly, "確認" End If End If End With End Sub

  • 奇数・偶数の判断 VBA

    Sub Macro1() Dim i As Long i = 1 For i = 1 To 10 If i = ? Then '偶数ならと言うコード MsgBox "偶数です" Else MsgBox "奇数です" End If Next End Sub ここまでは自分で作れたのですが、iが奇数か偶数かを判断するコードがわかりません。 ご教授よろしくお願いします。

  • 【Excelマクロ】もっと頭の良い書き方って無いかな?

    5行空白列があったらそこで処理を終わりたいんですが、もっといい書き方はないでしょうか? 下記が私の考えた頭の悪いやり方です。 Sub macro() Dim i As Integer For i = 1 To 1000 If Cells(i, 1) = "" Then  If Cells(i + 1, 1) = "" Then   If Cells(i + 2, 1) = "" Then    If Cells(i + 3, 1) = "" Then     If Cells(i + 4, 1) = "" Then      If Cells(i + 5, 1) = "" Then       MsgBox (i - 1 & "行目で終わりです")       Exit For      End If     End If    End If   End If  End If End If Next End Sub

  • 表のなかに空白セルがある場合列を日表示にする

    お世話になります。 D5からBK200くらいの表があり、 コマンドボタンにより 空白の列を非表示にしたいと思っています。 いろいろ調べて書いてみたのですが、うまくいきません。 どなたか教えていただけないでしょうか。 よろしくお願いします。 Sub 空白列表示しない() Dim I As Long For I = 5 To 200 If Cells(5, I).Value = "" Then Columns(I).Hidden = True Else End If Next End Sub

  • Excel VBAで検索(Win2000 Excel2000)

    現在、下記のようなコードを書いています。データテーブルの縦と横の検索値を探してその列数と行数を返したいのですが、下記の Sub検索1 と Sub検索2 を1つのSubで実行させるにはどうしたらよいのでしょうか?よろしくお願い致します。 ----------------------------------------- Sub 検索1() Worksheets("Data").Activate Dim x As Integer For x = 3 To 22 If Cells(2, x).Value >= 12 Then MsgBox x Exit Sub End If Next MsgBox "見つかりません" End Sub --------------------------------------------- Sub 検索2() Worksheets("Data").Activate Dim i As Integer For i = 4 To 42 If Cells(i, 2).Value = "A" Then MsgBox i Exit Sub End If Next MsgBox "見つかりません" End Sub

  • 文字列で渡された式

    質問です。 タイトルのままですが文字列で渡された式で 処理を決定させることはできるのでしょうか? たとえば ============================ dim str as string = "10 > 5" if strの文字列判定 then msgbox("TRUE") else msgbox("FALSE") end if ============================