XMLをエクセルに取り込むマクロを作成する方法

このQ&Aのポイント
  • XMLをエクセルに取り込むマクロを作成したいです。
  • エクセル2003にて、XMLをインポートするとタイトルが文字化けしてしまいます。
  • 他の方法でXMLをエクセルに取り込む方法があれば教えてください。
回答を見る
  • ベストアンサー

XMLをエクセルに取り込むマクロ

XMLをエクセルで取り込み、表にしたいと考えています。 エクセル2003にて下記のtest.xmlをインポートすると <?xml version="1.0" encoding="UTF-8" ?> <McXMLRoot> <McXMLData> <McXMLPageData> <ヘッダ情報> <作成日> <value>平成21年 5月28日</value> </作成日> <作成時間> <value>10時55分12秒</value> </作成時間> <ページ数> <value>0001</value> </ページ数> </ヘッダ情報> <明細情報> <商品名> <value>パソコン</value> </商品名> <価格> <value>100000</value> </価格> </明細情報> <明細情報> <商品名> <value>プリンタ</value> </商品名> <価格> <value>20000</value> </価格> </明細情報> </McXMLPageData> </McXMLData> </McXMLRoot> エクセルでタイトルがvalue,value2…,value5 のように表示されます。 作成日,作成時間,ページ数,商品名,価格 のように表示するためのマクロを作成しようとしているのですが、 Public Const XmlPass = "D:\WORK\test.xml" Public Sub Auto_Open() ActiveWorkbook.XmlImport URL:=XmlPass _ , ImportMap:=Nothing, Overwrite:=True, Destination:=Range("$A$1") End Sub で取り込んだあと、どのように処理すればよいのでしょうか? (1)テキストとして読み込む (2)<value>のすぐ前にあるタイトル部分を検索 (3)タイトル部分を切り出す。 (4)指定のセルにタイトルをセット とすると、切り出したタイトルの文字コードがUTF-8のため 文字化けしてしまいます。 Private Sub setTitle() Dim FileNoRead% Dim wkFree$ Dim result1 As Integer Dim result2 As Integer Dim result3 As Integer Dim Title(300) As String Dim Soeji As Integer Dim Kaishi As Integer Dim SWork As String Soeji = 0 Kaishi = 1 FileNoRead% = FreeFile ' テキストのオープン Open XmlPass For Input Access Read As #FileNoRead% ' テキストの読込 Line Input #FileNoRead%, wkFree$ 'ファイルから1行読み込む ' テキストのクローズ Close #FileNoRead% Do While True Soeji = Soeji + 1 result1 = InStr(Kaishi, wkFree$, "<value>") '<value>出現位置 result2 = InStrRev(wkFree$, ">", result1) + 1 'タイトル終了位置 result3 = InStrRev(wkFree$, "<", result2) + 1 'タイトル開始位置 SWork = Mid(wkFree$, result3, (result1 - result2)) Title(Soeji) = SWork Kaishi = InStr(result1, wkFree$, "</value>") '</value>出現位置 Kaishi = Kaishi + 8 Loop End Sub ほかに何かよい方法があったら教えてください。 P.S)作りはじめのため、バグ多数存在します。

  • torum
  • お礼率61% (19/31)

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

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.4

「このとき<明細情報>はセットできますが、<ヘッダ情報>はどのようにセットするのでしょうか?」 No2です。<ヘッダ情報>がセットされないのは、 Set nlist = ObjXml.selectNodes("//明細情報/*") で、<明細情報>以下の要素しかnlistに入れてないからです。 <ヘッダ情報>以下をnlistにセットするなら、 Set nlist = ObjXml.selectNodes("//ヘッダ情報/*") としてXpathで選ぶか、又はルートからたどって Set nlist = ObjXml.childNodes(1).childNodes(0).childNodes(0).childNodes(0).childNodes として選ぶか、又はTagName指定で Set nlist = ObjXml.getElementsByTagName("ヘッダ情報") Set nlist = nlist(0).childNodes と選びます。選んだ上で、 For Each node In nlist msgbox node.nodeName & _ node.childNodes(0).childNodes(0).nodeValue Next node として、項目名と内容を取得できます。 「文字コードは勝手に変換してくれてます(本当かな?)」 ヘッダーの項目の数は nlist.Length になります。

torum
質問者

お礼

ありがとうございました。 勉強になりました。 改良したプログラムで何とかなりました。 ただ、また新たな問題が… その内容は"XMLをエクセルに取り込むマクロその2" として新たに投稿したのでよろしければ教えてください

その他の回答 (3)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

>文字コードがUTF-8のため文字化けしてしまいます。 の部分限定だと、ADODB.Streamを介して、UTF-8→Shift JIS等に変換できます。検索していただくとVBAのコードも沢山見つかりますが、一例です。 http://oshiete1.goo.ne.jp/qa1963113.html

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

もうちょっと丁寧に、ちゃんと動くように書き直しました。 Public Const XmlPass = "D:\WORK\test.xml" Sub parseXML() Dim ObjXml As MSXML2.DOMDocument Set ObjXml = CreateObject("MSXML2.DOMDocument") If ObjXml.Load(XmlPass) = False Then Exit Sub End If Dim nlist As MSXML2.IXMLDOMNodeList Dim h_nlist As MSXML2.IXMLDOMNodeList Set nlist = ObjXml.selectNodes("//明細情報/*") Dim node As MSXML2.IXMLDOMNode Dim i As Integer i = 2 For Each node In nlist Set h_nlist = ObjXml.getElementsByTagName("作成日") Cells(i, 1).Value = h_nlist(0).childNodes(0).childNodes(0).nodeValue Set h_nlist = ObjXml.getElementsByTagName("作成時間") Cells(i, 2).Value = h_nlist(0).childNodes(0).childNodes(0).nodeValue Set h_nlist = ObjXml.getElementsByTagName("ページ数") Cells(i, 3).Value = h_nlist(0).childNodes(0).childNodes(0).nodeValue If node.nodeName = "商品名" Then Cells(i, 4).Value = node.childNodes(0).childNodes(0).nodeValue End If If node.nodeName = "価格" Then Cells(i, 5).Value = node.childNodes(0).childNodes(0).nodeValue i = i + 1 End If Next node End Sub

torum
質問者

お礼

回答ありがとうございました。 ただ、申し訳ありませんが大事なことを伝えておりませんでした。 取り込むべきXMLの種類は多数あり、タイトルが作成日,作成時間,ページ数,商品名,価格 とは限らないのです。 なのでやはりXMLをインポート後にタイトルセットでないとダメのようです。 そこで以下を考えました。 ↓ Private Sub parseXML() Dim ObjXml As MSXML2.DOMDocument Set ObjXml = CreateObject("MSXML2.DOMDocument") If ObjXml.Load(XmlPass) = False Then Exit Sub End If Dim nlist As MSXML2.IXMLDOMNodeList Dim h_nlist As MSXML2.IXMLDOMNodeList Set nlist = ObjXml.selectNodes("//明細情報/*") Dim node As MSXML2.IXMLDOMNode Dim strWork As String Dim i As Integer i = 1 For Each node In nlist If i = 1 Then '最初のタイトルを退避 strWork = node.nodeName MsgBox ("最初のタイトル[" & strWork & "]") Else MsgBox ("node.nodeName[" & node.nodeName & "]") If strWork = node.nodeName Then Exit For End If End If ' タイトルセット Cells(1, i).Value = node.nodeName i = i + 1 Next node End Sub このとき<明細情報>はセットできますが、<ヘッダ情報>はどのようにセットするのでしょうか? Cells(1, i).Value = ??? を教えてください。 よろしくお願いします。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

XMLをシートにインポートせずに、マクロVBAでXMLと処理した方が簡単です。(読み込み元のXML構造が分からないので以下のコードは想像です) まず、VBEの参照設定で「Microsoft XML v6.0」をチェックします。 Public Const XmlPass = "D:\WORK\test.xml" sub parseXML() 'XMLのDOMオブジェクトを準備します。 Dim ObjXml As MSXML2.DOMDocument Set ObjXml = CreateObject("MSXML2.DOMDocument") 'XMLファイルをオブジェクトにロードします。 if(ObjXml.Load(XmlPass) = false ) Then Exit sub Dim nlist As MSXML2.IXMLDOMNodeList 'ノードリストオブジェクトも準備します。 Set nlist = ObjXml.selectNodes("//明細情報/*") 'Xpathで取得するノードを選びます。 Dim node As MSXML2.IXMLDOMNode 'ノードオブジェクトを準備します dim i as Integer i=2 For Each node In nlist '以下のループで中身を取り出します。 if node.childNodes(0).nodeName = "商品名" then _ cells(i,4).value = node.childNodes(0).childNodes(0).childNodes(0).value end if if node.childNodes(0).nodeName = "価格" then _ cells(i,5).value = node.childNodes(0).childNodes(0).childNodes(0).value end if i = i + 1 Next node End Sub

torum
質問者

お礼

大変申し訳ありません。 大事な部分をお伝えしていませんでした。 回答番号2のお礼を参照し、ご回答いただけないでしょうか? よろしくお願いします。

関連するQ&A

  • XMLをエクセルに取り込むマクロその2

    以下のtest2.xmlを <?xml version="1.0" encoding="UTF-8" ?> <McXMLRoot> <McXMLData> <McXMLPageInfo> <page>1</page> <overLay></overLay> <partition>PAGE</partition> </McXMLPageInfo> <McXMLPageData> <現頁> <value>0001</value> </現頁> <作成日付> <value>平成21年 6月 1日現在</value> </作成日付> <Group0001> <氏名> <value>あああ</value> </氏名> <生年月日> <value>昭和48年 2月21日</value> </生年月日> </Group0001> <Group0002> </Group0002> <Group0003> </Group0003> </McXMLPageData> <McXMLPageInfo> <page>2</page> <overLay></overLay> <partition>PAGE</partition> </McXMLPageInfo> <McXMLPageData> <現頁> <value>0004</value> </現頁> <作成日付> <value>平成21年 6月 1日現在</value> </作成日付> <Group0001> <氏名> <value>いいい</value> </氏名> <生年月日> <value>昭和55年 12月5日</value> </生年月日> </Group0001> <Group0002> <法人名> <value>AAA株式会社</value> </法人名> <住所> <value>AA市1丁目1番地</value> </住所> </Group0002> <Group0003> <支店名> <value>BBB営業所</value> </支店名> </Group0003> </McXMLPageData> </McXMLData> </McXMLRoot> を読むマクロ↓ Public Const XmlPass = "D:\temp\test2.xml" Public y As Integer Public ctr As Long Public Sub Auto_Open() 'On Error Resume Next Workbooks.OpenXML Filename:= _ XmlPass _ , LoadOption:=xlXmlLoadImportToList Range("A1").Select Call RetsuSakujo Call parseXML End Sub Private Sub RetsuSakujo() ctr = 1 Do Until "" = Trim(Worksheets("sheet1").Cells(1, ctr)) If "eform" = Trim(Worksheets("sheet1").Cells(1, ctr)) Or _ "page" = Trim(Worksheets("sheet1").Cells(1, ctr)) Or _ "overLay" = Trim(Worksheets("sheet1").Cells(1, ctr)) Or _ "partition" = Trim(Worksheets("sheet1").Cells(1, ctr)) Then Worksheets("sheet1").Columns(ctr).EntireColumn.Delete ctr = 0 End If ctr = ctr + 1 Loop End Sub Private Sub parseXML() Dim objDOM, rtResult y = 1 Set objDOM = CreateObject("MSXML2.DOMDocument") rtResult = objDOM.Load(XmlPass) If rtResult = True Then Call setTitle(objDOM.childNodes) End If Set objDOM = Nothing End Sub Sub setTitle(objNode) Dim obj For Each obj In objNode If obj.hasChildNodes Then If obj.parentNode.nodeName <> "McXMLRoot" And _ obj.parentNode.nodeName <> "McXMLData" And _ obj.parentNode.nodeName <> "McXMLPageData" And _ obj.parentNode.nodeName <> "McXMLPageInfo" _ Then If SearchChild(obj.childNodes) = False Then If y >= ctr Then Exit Sub End If Cells(1, y).Value = obj.parentNode.nodeName y = y + 1 End If End If Call setTitle(obj.childNodes) End If Next End Sub Private Function SearchChild(objNode) As Boolean Dim obj For Each obj In objNode If obj.hasChildNodes Then SearchChild = True Else SearchChild = False End If Next End Function を作成してエクセルマクロを試したところ、 タイトルが 現頁,作成日付,氏名,生年月日,現頁2,作成日付2,氏名2,生年月日2,法人名 となります。が、本当は 現頁,作成日付,氏名,生年月日,法人名,住所,口座番号,口座名義人,支店名 としたいのです。(エクセルでXMLソースを表示した時の順序) なにかよい方法があれば教えてください。 よろしくお願いします。

  • EXCELマクロでシート作成&シート名をつける方法

    EXCELでセルK列に入力した名称でシートをどんどん作成したいのですが、 下記のようにやってみましたが、うまく実行されません。 2回目の←の部分で、終わってしまいます。 詳しい方、教えてください。 Sub Macro3() Dim neSheet As String Dim fMax As Integer Dim num As Integer Dim i As Integer fMax = Range("B2").Value num = 2 For i = 1 To fMax neSheet = Range("k" & num).Value Worksheets.Add(After:=Worksheets(1)).Name = neSheet ← num = num + 1 Next i End Sub

  • エクセルマクロでファイルを作れません

    ワークブックを開く時に自動的にxmlファイルを作るマクロを組みました。 しかし、そのマクロを組んだPCでは正常にxmlファイルが作成されますが、 他のPCで試したらxmlファイルが作成されずにエラーになりました。 その【xmlファイルが作成されなかった】理由がわかりません。 例えば、PCのセキュリティで、マクロによるファイルの読み書きの動作が弾かれていたりするのでしょうか。 以下、そのマクロの本文です。 解決の手がかりだけでも掴めましたら教えていただくと嬉しいです。 Private Sub Workbook_Open() ' ワークブックを開く時のイベント 'Cドライブ直下に「あああ.xml」ファイルが存在すれば削除 If Dir("C:\あああ.xml") <> "" Then Kill "C:\あああ.xml" Else End If 'xmlファイルを作成   ' XMLファイル保存先の指定 Dim iFileNum As Integer iFileNum = FreeFile Dim SaveFileName As String SaveFileName = "C:\あああ.xml" Open SaveFileName For Output As #iFileNum  '←ここでエラーになります!! ''xmlファイル本文の作成 Print #iFileNum, "<?xml version=""1.0"" encoding=""UTF-8""?>" Print #iFileNum, "<markers>" Print #iFileNum, "</markers>" '後処理 If iFileNum > 0 Then Close #iFileNum End Sub

  • エクセルマクロで教えてください

    マクロ初心者です。アドバイスをお願いします。以下のマクロですとB列の100行目までの塗りつぶしのセルのカウントは出来るのですが、シート上の全てをカウントしたいのです。1TO 100の100の部分をどう変更したら良いのか教えてください。 Sub セルの色数1() Dim I As Integer Dim Count As Integer Count = 0 For I = 1 To 100 If Cells(I, 2).Interior.ColorIndex <> xlNone Then Count = Count + 1 Next I Range("C1").Value = Count End Sub

  • VBA でxmlの全要素・属性の読み込み

    お世話になります。 ExcelのVBAを使用して、xmlファイルの全要素・全属性を読み込み、 Excelに書き出したいと思っております。 ネットを参考に下記のソースで、全ての要素をエクセルに 書き出すことは、できたのですが、どうしても全属性を読み込むことが できません。 どのようにすればよいか教えて頂けないでしょうか? お手数ですがよろしくお願い致します。 -----------------ソース---------------- Sub main() Dim myxml As New DOMDocument40 Dim nodelist As IXMLDOMNodeList Dim onenode As IXMLDOMNode Dim i As Integer myxml.Load ("C:\Users\harada\Desktop\problem_info取り込み\problem_info.xml") Set nodelist = myxml.DocumentElement.ChildNodes i = 1 For Each onenode In nodelist Call submain(onenode, i, 1) i = i + 1 Next End Sub Sub submain(tmp As IXMLDOMNode, itmp As Integer, j As Integer) If tmp.HasChildNodes = False Then Exit Sub k = tmp.ChildNodes.Length For m = 0 To k - 1 Cells(itmp, j + m).Value = tmp.ChildNodes(m).Text Next j = j + m Set tmp = tmp.ChildNodes.NextNode Call submain(tmp, itmp, j) End Sub

  • マクロをボタンに登録するとちゃんと走らない

    エクセル2000で以下のような百人一首のマクロを作ったのですが マクロをボタンに登録すると上の句と下の句の更新が後回しになります VBEを開いたままマクロを実行すると上の句下の句を更新したあとに 解答用のinputboxがちゃんと先に出てきます。 何か解決方法はありますか? マクロを作ったのは初めてに近いです あとマクロコードを2行にするのが出きるときと出来ない時があるのは 何故でしょう。同じように _ アンダーバーを入れて改行してるのですが エラーになります。改行して良い所と悪い所があるのですか 教えて欲しいです。 Sub 百人一首一番から二十番() Dim hyakuSh As Worksheet Dim mySh As Worksheet Set mySh = Worksheets("百人一首クイズ") Set hyakuSh = Worksheets("百人一首") Dim myRow As Integer Randomize myRow = Int((21 - 2 + 1) * Rnd + 2) Dim kaminoku As String Dim kaminoku2 As String Dim kaminoku3 As String Dim simonoku As String Dim simonoku1 As String Dim sakusha As String kaminoku = hyakuSh.Cells(myRow, 3).Value kaminoku2 = hyakuSh.Cells(myRow, 4).Value kaminoku3 = hyakuSh.Cells(myRow, 5).Value shimonoku = hyakuSh.Cells(myRow, 6).Value shimonoku1 = hyakuSh.Cells(myRow, 7).Value sakusha = hyakuSh.Cells(myRow, 8).Value mySh.Activate mySh.Shapes("Text Box 2").Select Selection.Characters.Text = kaminoku & Chr(10) & kaminoku2 & Chr(10) & kaminoku3 Dim MyTBox As Integer Dim smRow As Integer Dim smRow2 As Integer Dim smRow3 As Integer Dim smRow4 As Integer Dim smRow5 As Integer Dim i As Integer mySh.Shapes(2).Select Randomize smRow5 = Int((51 - 2 + 1) * Rnd + 2) Selection.Characters.Text = hyakuSh.Cells(smRow5, 6).Value & Chr(10) & hyakuSh.Cells(smRow5, 7).Value & Chr(10) & hyakuSh.Cells(smRow5, 8).Value mySh.Shapes(3).Select Randomize smRow = Int((51 - 2 + 1) * Rnd + 2) Selection.Characters.Text = hyakuSh.Cells(smRow, 6).Value & Chr(10) & hyakuSh.Cells(smRow, 7).Value & Chr(10) & hyakuSh.Cells(smRow, 8).Value mySh.Shapes(4).Select Randomize smRow2 = Int((51 - 2 + 1) * Rnd + 2) Selection.Characters.Text = hyakuSh.Cells(smRow2, 6).Value & Chr(10) & hyakuSh.Cells(smRow2, 7).Value & Chr(10) & hyakuSh.Cells(smRow2, 8).Value mySh.Shapes(5).Select Randomize smRow3 = Int((51 - 2 + 1) * Rnd + 2) Selection.Characters.Text = hyakuSh.Cells(smRow3, 6).Value & Chr(10) & hyakuSh.Cells(smRow3, 7).Value & Chr(10) & hyakuSh.Cells(smRow3, 8).Value mySh.Shapes(6).Select Randomize smRow4 = Int((51 - 2 + 1) * Rnd + 2) Selection.Characters.Text = hyakuSh.Cells(smRow4, 6).Value & Chr(10) & hyakuSh.Cells(smRow4, 7).Value & Chr(10) & hyakuSh.Cells(smRow4, 8).Value Randomize MyTBox = Int((6 - 2 + 1) * Rnd + 2) mySh.Shapes(MyTBox).Select Selection.Characters.Text = shimonoku & Chr(10) & shimonoku1 & Chr(10) & sakusha mySh.Shapes("Text Box 2").Select Dim Ans As Integer *以下の部分が先に出てきて答えを入れないと上のコードが実行されない* ****ここ一行で書いてあるので見にくい部分******* Ans = InputBox(hyakuSh.Cells(myRow, 3).Value & hyakuSh.Cells(myRow, 4).Value & hyakuSh.Cells(myRow, 5).Value & Chr(10) & Chr(10) & "下の句を番号で答えなさい", Title:="百人一首", Xpos:=7500, Ypos:=2500) ********************************* If Ans = MyTBox Then MsgBox " 正解!!! V(・ o ・)V " Else MsgBox ("間違いです!!!!!!!!" & Chr(10) & Chr(10) & hyakuSh.Cells(myRow, 6).Value & hyakuSh.Cells(myRow, 7).Value & Chr(10) & Chr(10) & sakusha & "です") End If End Sub

  • マクロが実行できません。。。どこがいけないのでしょうか???

    Sub 米ドル換算() Dim 元金 As Long Dim ドル価格 As Integer Dim 米ドル換算額 As Double ' 「元金」の値を取得する 元金 = Range("A4").Value ' 「ドル価格」を取得する ドル価格 = Range("A2").Value ' 取得した「元金」と「ドル価格」をもとに「米ドル換算額」を取得する 米ドル換算額 = 元金 / ドル価格 ' 算出した「米ドル換算額」を出力する Range("B4").Value = 米ドル換算額 End Sub ちなみに 元金 = Range("A4").Value ↑ この部分が「Range」メソッドは失敗しました。_Globalオブジェクト と表示されるのですが、どういうことでしょうか?

  • Excel VBA ListBoxの行数取得の件

    OSは、XP Excelは、2003 を使用しています。 ユーザーフォームで、ListBoxの行数取得のところが上手く行かずに困っています。 ************** Private Sub btnSalesDelete_Click() 'lstinfoにおいて、どの行も選択されていなければ、終了 If lstInfo.ListIndex = -1 Then Exit Sub Dim res As Integer Dim Msg As String, Title As String Msg = "伝票番号:" & lstInfo.Value & " を削除します。よろしいですか?" Title = "確認" res = MsgBox(Msg, vbYesNo + vbExclamation + vbDefaultButton2, Title) If res = vbNo Then Exit Sub 'シート「売上基本情報」の該当行の「削除」列に1を代入 Dim TargetRow As Integer TargetRow = lstInfo.Value + 1 Worksheets("売上基本情報").Cells(TargetRow, 5).Value = 1 'シート「売上明細」の該当行の「削除」列に1を代入 Dim c As Integer c = lstInfoMeisai.ListCount '明細行の行数をcに代入 Dim i As Integer Dim r As Integer For i = 0 To c - 1 r = lstInfoMeisai.List(i, 0) '←←←ここで実行エラー13 型が一致しません になります。 Worksheets("売上明細").Cells(r + 1, 15).Value = 1 Next 'lstinfoから、行を削除 lstInfo.RemoveItem lstInfo.ListIndex 'lstinfomeisaiのリストをクリア lstInfoMeisai.Clear End Sub ***************** 上記で実行すると、lstInfoのListCountと同じ数字を、lstInfoMeisaiの方にも代入されます。 実際、lstInfoMeisaiのListCountが 12、lstInfoのListCountが 3 の場合、 rが4になった時、実際にはそのListCountにがデータがないので、””を返してしまい、 実行エラー13 型が一致しません とデバックになってしまいます。 説明が上手くなくて申し訳ありませんが、どなたか修正の仕方を教えていただけないでしょうか? よろしくお願い致します。

  • Excel VBA ・・・教えてください

    何度も質問させて頂いてます。すみません、 下記のプログラムはこの場で教えて頂いたプログラムで、 実行すると●の後を▲や■が追いかける動きをします。 下記のプログラムをある程度使用して 1~20の数字が順々で追いかけっこする プログラムを作成するにはどのようにすればいいのでしょうか… できればプログラムは長めにならず 20の数字から簡単に増やすことのできるような そんなプログラムが作成したいです… どなたかアドバイスお持ちの方 教えて下さいお願いします... Dim time1 As Integer, time As Integer Dim X As Integer, Y As Integer Dim X1 As Integer, Y1 As Integer Dim X2 As Integer, Y2 As Integer Dim maru As String, yoko As String, tate As String Dim sankaku As String, shikaku As String Sub 描画() Cells(Y2, X2).Value = shikaku Cells(Y1, X1).Value = sankaku Cells(Y, X).Value = maru End Sub Sub 削除() Cells(Y2, X2).Value = "" End Sub Sub 待機() For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next End Sub Sub 座標移動() X2 = X1 Y2 = Y1 X1 = X Y1 = Y If yoko = "右" Then X = X + 1 Else X = X - 1 End If If X = 30 Then yoko = "左" ElseIf X = 1 Then yoko = "右" End If If tate = "上" Then Y = Y + 1 Else Y = Y - 1 End If If Y = 20 Then tate = "下" ElseIf Y = 1 Then tate = "上" End If End Sub Sub main() maru = "●" sankaku = "▲" shikaku = "■" X = 1 Y = 1 X1 = 1 Y1 = 1 X2 = 1 Y2 = 1 yoko = "右" tate = "上" Do 描画 待機 削除 待機 座標移動 Loop End Sub

  • エクセルのマクロについて

    行を選択し、関数を数値に変換するために下記のようなマクロを作成しました。 選択する行数が少ないと実行でるのですが、一度にたくさんの行を選択すると下のようなエラーが返されます。 「実行時エラー"424"」オブジェクトが必要です。 どこが間違いなのか教えて頂ければ助かります。 Sub TextValue() '選択された行範囲をデータに変換します。 Dim rc As Integer Dim rngCell As Range Dim sMsg As String rc = MsgBox("データに変換しますか?", vbOKCancel) If rc = vbCancel Then Exit Sub sMsg = "変換する範囲を選択して下さい。" Set rngCell = Application.InputBox(Prompt:=sMsg, Type:=8) rc = MsgBox("選択されている範囲の関数を" & vbCrLf & "データに変換します。" & vbCrLf & _ "選択された行範囲は " & rngCell.Address(0, 0) & vbCrLf, _ vbOKCancel, "処理を確認してください。") If rc = vbCancel Then Exit Sub rngCell.Select Selection.Value = Selection.Value End Sub Excel2002  OSはXPです。 宜しくお願い致します。

専門家に質問してみよう