外出自粛中でも楽しく過ごす!QAまとめ>>

ジョルダンの乗換案内を、VBAで操作したいのですが、詰んでしまいました・・・

Sub 乗換案内()
Dim objIE As Object

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True

objIE.Navigate "http://www.jorudan.co.jp/"

Const READYSTATE_COMPLETE As Long = 4

Do While objIE.Busy = True
DoEvents
Loop

Do Until objIE.ReadyState = READYSTATE_COMPLETE
Loop

objIE.document.all("eki1").Value = "東京"
objIE.document.all("eki2").Value = "品川"

objIE.document.Forms(0).submit

Set objIE = Nothing
End Sub

を実行してVBAでIE操作をしたいのですが、うまくできません。

【質問1】
objIE.document.Forms(0).submit
はエラーにならないのですが、検索ボタンがクリックされず(検索結果は表示されず)
詳細検索画面
http://www.jorudan.co.jp/norikae/cgi/nori.cgi?rf …
に進んでしまいます。

objIE.document.Links(0).Clickにしてもダメでした。

【質問2】
出発地、到着地の指定はできたのですが日時の指定ができません。
2012/08/01 8時00分をプルダウンに入れたいのですが、
objIE.document.allをどのようにすればいいのでしょうか?

ご教授よろしくお願いします。

ソースを見ると、
<script type="text/javascript">select_day();select_time();</script>
となっていて、nameがありません。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

iwateryokou26さん


はじめまして。

以下のコードでできると思います。
> objIE.document.Links(0).Clickにしてもダメでした。
検索ボタンにも名前がついているので直接クリック命令をした方が良いと思います。

> 出発地、到着地の指定はできたのですが日時の指定ができません。
このエリアはJavaScriptで処理しているようで、HTMLには表示されません。
http://eki.jorudan.co.jp/com/js/com_v1.js?0301
を分析する必要がありますね。
 
Sub 乗換案内()
 Const READYSTATE_COMPLETE As Long = 4
 Dim objIE As Object
 
 Set objIE = CreateObject("InternetExplorer.Application")
 With objIE
  .Visible = True
  .Navigate "http://www.jorudan.co.jp/"
  Do While (.Busy = True) Or (.ReadyState <> READYSTATE_COMPLETE)
   DoEvents
  Loop
 End With
   
 With objIE.document.all
  .eki1.Value = "東京"  ' 出発地
  .eki2.Value = "品川"  ' 到着地
  .Dym.Value = 201208   ' 年月
  .Ddd_slc.Value = 1     ' 日
  .Dhh.Value = 8       ' 時
  .Dmn1.Value = 0      ' 分(10分単位)
  .Dmn2.Value = 0      ' 分( 1分単位)
  .s.Click           ' 検索クリック
 End With
 Set objIE = Nothing
End Sub
    • good
    • 0
この回答へのお礼

はじめまして。ご回答ありがとうございます。JavaScriptで処理しているからなのですね。

せっかくコードを頂いのですが.s.Clickの部分でエラーになり、ログインできませんでした・・・

お礼日時:2012/07/27 22:55

iwateryokou26さん


 
No2です。
すみません。前回はできたと思ったのですが…
以下の所を修正して試してください。

  .s.Click                 ' 検索クリック
       ↓
  objIE.document.all("S").Click   ' 検索クリック
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2012/10/15 22:33

わざわざ、VBAでそこまでしなくても、


フォームからhttp://www.jorudan.co.jp/norikae/cgi/nori.cgiにGETでデータ飛ばしてるだけなので、
VBAでURLを組み立ててあげれば良いと思いますが・・・。

http://www.jorudan.co.jp/norikae/cgi/nori.cgiの後に?を付けてパラメーターを連結するだけなので簡単です。
パラメータ名(フォームの部品のname属性)=値(フォームの部品のvalue属性)の形式で書きます。
複数のパラメータを送信する場合は、&で囲みます。
2バイト(日本語など)を送信する場合は、URLエンコード(%E6%9D%B1%E4%BA%ACなど)する必要があります。
VBAでURLエンコードするにはコチラを参照→http://bit.ly/PDLQ35

ざっとフォームを見てみると、URLのパラメータとフォームの対応は以下のようになっています。
http://www.jorudan.co.jp/norikae/cgi/nori.cgi?(このまま)
eki1=出発地(URLエンコード)&
eki2=到着地(URLエンコード)&
eki3=経由駅(URLエンコード)&
via_on=1&(このまま)
Dym=年月(201207)&
Ddd=日(1~31)&
Dhh=時間(0~23)&
Dmn1=十分(1~5)&
Dmn2=一分(0~9)&
Cway=検索種別(0:出発、1:到着、2:始発、3:終電)&
C7=1&(このまま)
C2=飛行機(0:おまかせ、1:使わない)&
C3=高速バス(0:おまかせ、1:使わない)&
C1=有料特急(0:おまかせ、1:使わない、2:100km以上なら使う)&
C4=優先座席(0:指定席、1:自由席、2:グリーン席)&
C6=乗換時間(0:短め、1:標準、2:余裕を持つ)&
S=%E6%A4%9C%E7%B4%A2&(このまま)
Cmap1=0&(このまま)
rf=nr&(このまま)
pg=0&(このまま)
eok1=&(このまま)
eok2=&(このまま)
eok3=&(このまま)
Csg=1(このまま)
※URLエンコードはエンコードが必要です。
※このままは、必要なので変更せずに連結してください。

これをヒントにURLをVBAで生成するのが一番早いと思います。
文字列の連結だけですし。

できたURLを
Sub 乗換案内(Url)
Dim objIE As Object

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True

objIE.Navigate Url

Set objIE = Nothing
End Sub
に引数として渡せばいいかと思います。
    • good
    • 0
この回答へのお礼

なるほど~!そのような方法もあるのですね。

ひとつひとつ細かく説明していただいて助かります!さっそく試してみようと思います!
ありがとうございました。大変参考になりました。

お礼日時:2012/07/24 21:35

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

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

QエクセルVBAで、Yahooの路線の片道料金を取得する

A2に(出発地の)大阪、
B2に(目的地の)名古屋とあったら、
C2に(運賃:片道)6,180円が入るようにしたいのです。
コードを教えて頂きたく御願いします。
(この部分しか書けませんでした。)
Sub test()
Dim IE
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "http://transit.map.yahoo.co.jp"
IE.Visible = True
IE.Quit
SetIE = Nothing
End Sub

Aベストアンサー

こんばんは。

失礼しました。ADO を参照設定ままで、作っていたので、それを外さずに動かしていたからです。

>Private Function Encode_Uni2UTF(ByRef strUni As String)
>のところで止まります。
止まる理由はよく分かりませんが、以下のようにすればよいはずです。
ただ、金額は、日時設定していませんから、値段が変わります。

ひとつのまとまりを、以下に、そのまま上書きしてしてください。

'-------------------------------------------
Private Function Encode_Uni2UTF(ByRef strUni As String)
Dim buf As Variant
Dim tbuf As Variant
Dim n As Variant
Const CSET = "UTF-8"
Const ADTYPETEXT = 2
Const ADTYPEBINARY = 1
Dim ADOstrm As Object 'ADODB.Stream

  On Error GoTo ErrHandler
  Set ADOstrm = CreateObject("ADODB.Stream") 'New ADODB.Stream
  ADOstrm.Open
  ADOstrm.Type = ADTYPETEXT
  ADOstrm.Charset = CSET
  ADOstrm.WriteText strUni
  ADOstrm.Position = 0
  ADOstrm.Type = ADTYPEBINARY
  ADOstrm.Position = 3
  buf = ADOstrm.Read()
  ADOstrm.Close
  Set ADOstrm = Nothing
 
  For Each n In buf
    tbuf = tbuf & "%" & Hex(n)
  Next
  Encode_Uni2UTF = tbuf
  Exit Function
ErrHandler:
  If ADOstrm Is Nothing = False Then ADOstrm.Close
  Set ADOstrm = Nothing
End Function

こんばんは。

失礼しました。ADO を参照設定ままで、作っていたので、それを外さずに動かしていたからです。

>Private Function Encode_Uni2UTF(ByRef strUni As String)
>のところで止まります。
止まる理由はよく分かりませんが、以下のようにすればよいはずです。
ただ、金額は、日時設定していませんから、値段が変わります。

ひとつのまとまりを、以下に、そのまま上書きしてしてください。

'-------------------------------------------
Private Function Encode_Uni2UTF(ByRef strUni As ...続きを読む

QExcel VBAでインターネットを利用して運賃計算する方法

Excelで交通費の精算をしているのですが、シート上に入力した出発駅名・到着駅名から、自動的に運賃が出るようにしたいと考えています。
運賃改定のことも考え、インターネット上の路線検索サイト(http:/transit.yahoo.co.jp/ 等)のデータをうまく活用したいのです。
過去の質問( http://oshiete1.goo.ne.jp/kotaeru.php3?q=768527 )
を参考に

Sub 運賃()
On Error GoTo ERRH
syuppatu = ActiveSheet.Range("b2:b2").Value
toutyaku = ActiveSheet.Range("b3:b3").Value
Application.ScreenUpdating = False
Application.DisplayAlerts = False

'---取り込み部分
Workbooks.Open Filename:= _
"http://transit.yahoo.co.jp/search?p=" & toutyaku & "&from=" & syuppatu & "&sort=0&num=0&htmb=select&kb=NON&chrg=&air=AIR&yymm=200509&dd=9&hh=16&m1=05&m2=00"
'---

ActiveSheet.Name = "new"
Sheets.Add
ActiveSheet.Name = "s" & syuppatu
Sheets("s" & syuppatu).Range("b4:b4").Value = _
Replace(Replace(Sheets("new").Range("b27:b27").Value, "運賃:片道 ", ""), "円", "")

Sheets("new").Delete
ERRH:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

というマクロを作ったのですが、別のワークブックを作成してしまう等、あまり使い勝手がよくありません。

別のワークブックを作成しないでこのような処理を行う方法はありませんでしょうか?

理想としてはユーザー定義関数のようなかたちにできればよいのですが・・・

Excelで交通費の精算をしているのですが、シート上に入力した出発駅名・到着駅名から、自動的に運賃が出るようにしたいと考えています。
運賃改定のことも考え、インターネット上の路線検索サイト(http:/transit.yahoo.co.jp/ 等)のデータをうまく活用したいのです。
過去の質問( http://oshiete1.goo.ne.jp/kotaeru.php3?q=768527 )
を参考に

Sub 運賃()
On Error GoTo ERRH
syuppatu = ActiveSheet.Range("b2:b2").Value
toutyaku = ActiveSheet.Range("b3:b3").Value
Application.ScreenUpdating ...続きを読む

Aベストアンサー

以下の方法はどうでしょうか。ワークシートを追加して運賃検索結果を展開させます。運賃をコピー後ワークシートは削除します。
運賃は出発/到着駅名の下のセル(B4)に格納するようにしました。
ユーザ関数にする方法は分かりませんでした。

Sub new運賃計算()
Dim myString As String
Dim myWS As Worksheet

Set myWS = ActiveSheet

myString = "search?p=" & myWS.Range("B2").Value & "&from=" & myWS.Range("B3").Value & "&sort=0&num=0&htmb=select&kb=NON&chrg=&air=&yymm=200509&dd=11&hh=17&m1=05&m2=00"

Application.ScreenUpdating = False
ActiveWorkbook.Worksheets.Add
With ActiveSheet.QueryTables.Add(Connection:="URL;http://transit.yahoo.co.jp/" & myString _
, Destination:=Range("A1"))
.Name = myString
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With

myWS.Range("B4").Value = Replace(Replace(ActiveSheet.Range("B25").Value, "運賃:片道 ", ""), "円", "")

Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

以下の方法はどうでしょうか。ワークシートを追加して運賃検索結果を展開させます。運賃をコピー後ワークシートは削除します。
運賃は出発/到着駅名の下のセル(B4)に格納するようにしました。
ユーザ関数にする方法は分かりませんでした。

Sub new運賃計算()
Dim myString As String
Dim myWS As Worksheet

Set myWS = ActiveSheet

myString = "search?p=" & myWS.Range("B2").Value & "&from=" & myWS.Range("B3").Value & "&sort=0&num=0&htmb=select&kb=NON&chrg=&air=&yymm=200509&dd=1...続きを読む

Q「エクセルでワンクリックでルート検索したい」(2)

過去問の
http://oshiete.goo.ne.jp/qa/7336006.html

につきまして、上記の回答をそのままVBAに記述して
EXCEL2010において実行してみたのですが
「コンパイルエラー 構文エラー」になってしまい
添付の写真のようにエラーの箇所が示されるものの当方では修正ができません。

当方プログラマーではなくただコピペして実行してみただけです。
ググってもわかるレベルでないことがわかり
ここにて質問させていただきたくこととしました。

また、本当のところを申しますと
過去問では出発地の住所が"東京都渋谷区恵比寿~"に固定されておりますが
EXCELシート上のA列に出発地、B列に到着地の住所を入力しておくと
両地点の(車での)距離を表示するようにしたいのです。

大変に恐縮ですが、ご教示くださいますようお願い致します。

Aベストアンサー

以前のVBAは役に立たないので、別のVBAを書き換えています。

VBAでIEのページオブジェクトを開いてから、直接書き込んでいます。
質問のものはHTMLファイルを作成して、それを開いています。
表示が終わる(VBAが終了)するまでページはさわらないでください。

1行目はシングルクリックで開くコード。
書き換えるとダブルクリックに出来ます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

以下VBA
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("A:B")) Is Nothing Then Exit Sub
If Cells(Target.Row, 1).Text = "" Or Cells(Target.Row, 2).Text = "" Then Exit Sub
Dim objIE As Object
Dim tgt1
Dim tgt2

Set objIE = CreateObject("InternetExplorer.application")
tgt1 = Cells(Target.Row, 1).Text
tgt2 = Cells(Target.Row, 2).Text
objIE.Visible = True
objIE.Navigate "http://maps.google.co.jp/maps"
Do While objIE.Busy = True Or objIE.ReadyState <> 4: Loop
'--ルート乗換案内オブジェクトページのの項目をダイレクト書き込み
With objIE.Document
.all("d_launch").Click
Do While objIE.Busy = True Or objIE.ReadyState <> 4: Loop
Application.Wait Now + TimeValue("00:00:02")
'--車で行く~自社住所~得意先住所~検索
.all("dir_d_btn").Click
.all("d_d").Value = tgt1
.all("d_daddr").Value = tgt2
.all("d_sub").Click
.all("d_options_show").Click
End With
Set objIE = Nothing
End Sub

以前のVBAは役に立たないので、別のVBAを書き換えています。

VBAでIEのページオブジェクトを開いてから、直接書き込んでいます。
質問のものはHTMLファイルを作成して、それを開いています。
表示が終わる(VBAが終了)するまでページはさわらないでください。

1行目はシングルクリックで開くコード。
書き換えるとダブルクリックに出来ます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

以下VBA
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qエクセルで運賃計算

 タイトルどおりなのですが、電車の運賃計算をA駅からB駅までを入力して自動的に計算して結果が出てくるようにしたいのですが、このようなことをできる関数はありますか?もしもあるのであれば教えてください。
 色々試したのですが、どのような関数を書けばよいのかわからないです。

 もしも質問の意味がわからなかったら補足要求をしてください。

Aベストアンサー

INDEX関数とMATCH関数を使えば出来ると思います。
A駅を横軸からMATCH関数で探して、横軸のアドレスを調べる。
B駅を縦軸からMATCH関数で探して、縦軸のアドレスを調べる。
調べた横軸、縦軸を使い、INDEX関数でそのセルを参照する。
A1セルにA駅、B1セルにB駅、C1セルに値段
A2セルから右と下方向に早見表があり、
2行とA列が駅名であれば、
C1セルに

=INDEX(A2:K12,MATCH(A1,B2:K2,0),MATCH(B1,A3:A12,0))

上記は駅を10駅のサイズですので、
INDEXの第1パラメータは、早見表の金額部分を、
1個目のMATCHの第2パラメータは、横軸の駅名全部
2個目のMATCHの第2パラメータは、縦軸の駅名全部
を指定します。

いかがでしょうか。

Qエクセル マクロでの株価情報収集ってできるんですか?

先日、フリーソフトで株価チャート分析のエクセルマクロを見つけました。

実行するとエクセルのマクロでYahooファイナンスから
株価情報を自動的に取得してきて、
チャートやグラフを作ることが出来ます。

そのようなマクロはどうやって組んでいるのでしょうか?

私はエクセル上のマクロは得意なほうですが、
ネットとの連携などはどのように書いているのか全く想像がつきません。

具体的にどのようなメソッドやプロパティーなのか、
ご存知の方、教えてください。

「○○という言葉で検索すれば」といったお答えでも歓迎いたします。

よろしくお願いします。

Aベストアンサー

WEBページのフォーマットが確定しているという条件ならVBAで、WorkbooksコレクションのOpenメソッドから、Filenameの値に直接URLでも読み出せますね。ただ、余計なピクチャファイルも取り込んでしまいますが。

YAHOOファイナンスから特定銘柄のデータを取り込む流れとしてははこんな感じでしょうか・・・。

Sub InputStocDat()
On Error GoTo ERRH
mycod = InputBox("銘柄コードを入力してください")
Application.ScreenUpdating = False
Application.DisplayAlerts = False

'---取り込み部分
Workbooks.Open Filename:= _
  "http://quote.yahoo.co.jp/q?s=" & _
    mycod & ".t&d=t"
'---

ActiveSheet.Name = "new"
Sheets.Add
ActiveSheet.Name = "s" & mycod
Sheets("s" & mycod).Range("A1:F13").Value = _
Sheets("new").Range("A21:F33").Value
Sheets("new").Delete
ERRH:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

EXCEL2000 WIN2000にて動作

WEBページのフォーマットが確定しているという条件ならVBAで、WorkbooksコレクションのOpenメソッドから、Filenameの値に直接URLでも読み出せますね。ただ、余計なピクチャファイルも取り込んでしまいますが。

YAHOOファイナンスから特定銘柄のデータを取り込む流れとしてははこんな感じでしょうか・・・。

Sub InputStocDat()
On Error GoTo ERRH
mycod = InputBox("銘柄コードを入力してください")
Application.ScreenUpdating = False
Application.DisplayAlerts = False

'---取り込み部分
Workb...続きを読む

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

Qエクセルのセルにカレンダーを表示させ、日付をセルに入力させたい

エクセルについて教えて下さい。

エクセルのセルをクリックすると、
カレンダーのようなものが表示され、
マウスで選択すると、
セルに日付が入力されるようにするには
どうしたらよいですか?

すみませんが、宜しくお願い致します。

Aベストアンサー

#02です。foo-mさんがVBAをお使いになるなら、以下のサンプルをいじってみてください。

このサンプルはC4セルがクリックされたときにカレンダーコントロールを表示して、日付を選んだらその日付をC4に書き込み、カレンダーコントロールを閉じるマクロです。

Private Sub Calendar1_Click()
Selection.Value = Calendar1.Value
ActiveSheet.Calendar1.Visible = False
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$C$4" Then
ActiveSheet.Calendar1.Visible = True
End If
End Sub

マクロはシートのモジュールとしてペーストして下さいね

QEXCEL あるセルに数字が入力されれば既存マクロ実行させたい

ボタン等のグラフィックオブジェクトのマクロ実行は簡単なのですが、
ある位置のセルにデーターが入力されれば、
既存のマクロを自動実行させることできますか?

Aベストアンサー

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
if Range(ある位置) <>"" then call 既存のマクロ名
End Sub

ある位置と既存のマクロ名を変更して使ってみてください。
あと このVBAは 操作するワークシートのほうに記述します。


人気Q&Aランキング