• ベストアンサー

エクセルVBAで配列内に空白データを入れる場合

エクセル2000です。 ある大きな表のうち、0値を非表示ではなく完全に削除するために以下のようなマクロを書いてみました。 一旦配列に取り込んでいるのは高速化のためです。 これで見た目には目的を達しているのですが、実際には0値が長さ0の文字列に変わっただけで完全な空白にはなっていません。 配列にとりこまず、セルをループして0値のセルをClearすれば解決するのはわかるのですが、ほかにいい方法はないでしょうか? Sub TEST0値() Dim myAr With ActiveSheet x = .Range("A" & Rows.Count).End(xlUp).Row myAr = .Range("A4:AP" & x).Value For i = LBound(myAr, 1) To UBound(myAr, 1) For n = LBound(myAr, 2) To UBound(myAr, 2) If myAr(i, n) = 0 Then myAr(i, n) = "" Next n Next i .Range("A4:AP" & x).Value = myAr End With End Sub

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

こんにちは、エキスパートさん。 0のところには、Emptyを代入してみましょう。 If myAr(i, n) = 0 Then myAr(i, n) = Empty   以上です。  

merlionXX
質問者

お礼

なんと、= Empty なんて呪文があったのですね! 存じませんでした。 さすがは大師さまです。 ありがとうございました。

その他の回答 (8)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.9

こんにちは 以前、関連した質問に回答していたもので、気になりまして。 宿題の邪魔になってしまうかも知れませんが やや混乱されてるようにお見受けしたので。 merlionXXさんが以前から気になさっていたのは たしか、こういうことではなかったかと、、、 Sub test() With Range("B2")   .NumberFormatLocal = "@"   .Value = ""   MsgBox [istext(b2)]   .Value = Empty   MsgBox [istext(b2)] Dim Arr(0)   .Value = ""   MsgBox [istext(b2)]   .Value = Arr   MsgBox [istext(b2)] End With End Sub これ、回答じゃなくて、遅ーい、夏のご挨拶ってことで(^^;)

merlionXX
質問者

お礼

cj_moverさま、いつもありがとうございます。 な~るほどぉ~っ! セル書式が文字列になっていると、VBAで Value = "" とすると、長さ0の文字列が入って空白にはならないんですね。 その点、Value = Empty なら、書式に関係なく大丈夫ということですね。 ありがとうございました。 これで安心して夏休み(明日から4連休!蓼科~軽井沢)がとれます!

merlionXX
質問者

補足

この質問とはちがいますが、昨年の10月に別件で > ただ、Value = "" を使うと、セル書式が文字列になっている場合、完全な空白ではなくなるようで、ISBLANKがFALSEなのにCOUNTBLANKでは空白に数えられるという不整合がおきます。それでClearContentsするようにしています。 なんて、自分で書いているんですね!? すっかり忘れていました。 その際にもcj_moverさまには大変お世話になり、ありがとうございました。

  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.8

こんにちは。No.3,4,6です。 > Microsoft Scripting Runtime を参照していない環境だと > Dim myDic As Scripting.Dictionary がエラーになってしまいました。 処理を実行する前のコンパイルチェックで Scripting.Dictionary オブジェクトが見つからないからです。 ですから「これを使いますよ」って参照設定しておくのです。 > Dim myDic As Object だとエラーになりません。 処理を実行する前のコンパイルチェックでは、オブジェクトなら何でもいいと宣言しているのでエラーになりません。実行時の参照設定で WorkSheet が入ろうと、Scripting.Dictionary が入ろうともExcelは関知しないのです。 そして、処理が実行され、Set myDic = CreateObject("Scripting.Dictionary") の行にきて初めて "Scripting.Dictionary"オブジェクトを使うと分かり、Microsoft Scripting Runtime ライブラリを探してmyDicに参照設定します。 これが実行時バインディングというものです。その時点で Microsoft Scripting Runtime ライブラリが見つからない時は、エラーになります。 事務所で書類を作成している時に、必要な資料がなくて書庫に探しに行くようなものです。資料がなければ作業を中断せざるを得ません。 > 参照しない場合は Dim myDic As Object でやるしかないということですね。 そうなります。As Object のことは、CreateObject 関数のヘルプにきちんと書かれています。 ですが、Scripting.Dictionary を使おうとしていて、参照設定できる環境にあるのにあえて As Object と宣言して参照設定のメリットを享受しない理由が判りません。 処理を速くしたいと思ってコードを組んでいるのなら、参照設定してきちんとオブジェクトの型を宣言すべきと私は思います。

merlionXX
質問者

お礼

> そして、処理が実行され、Set myDic = CreateObject("Scripting.Dictionary") の行にきて初めて "Scripting.Dictionary"オブジェクトを使うと分かり、Microsoft Scripting Runtime ライブラリを探してmyDicに参照設定します。 なるほど、そういうことだったんですか。 そんなことも知らずに使っていました。 勉強になりました。 今回はわたしの勘違い質問でしたが、ずいぶん多くを学ぶことが出来ました。 OtenkiAmeさん、ありがとうございます。 皆様、ありがとうございます。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.7

>みなさま大変おさがわせいたしました。 いえ、いえ、かまいませんよ。 お騒がせ大好きです。。。(^^;;; ただ、ある条件のもとでは質問の件のように ""を代入することで、長さ0の文字列が入る場合があります。 で、当方の回答はそれを考慮しての回答でした。 要するに、未入力の状態にするということです。 さてさて、この【ある条件】とは何でしょう。 ま、これは夏休みの宿題、ということで。。。(^^;;;   以上です。

merlionXX
質問者

お礼

【ある条件】? Sub Test1() With Range("A1") .Formula = "=""""" .Copy .PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End With MsgBox IsEmpty(Range("A1")) End Sub ということではなく、配列で入れた場合の話ですよね? 何でしょう?! 夏休み終わってしまいました・・・・。

  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.6

こんにちは。No.3、No.4です。 > これはどのような違いがあるのでしょうか? > Newがついてるので何か違うのでしょうがわかりません。 Newキーワードは、オブジェクトのインスタンスを実際に作成させるために記述しています。 詳しいことは、VBAのヘルプファイルのCreateObject関数の項目とSetステートメントの項目をご一読いただくと良いかと思いますが、私の場合、もし使用するオブジェクトが分かっているなら、変数の宣言の段階でオブジェクトを宣言するようにしています。 これは、事前バイディングと実行時バインディングの違いによるもので、VBAを使い始めた頃に処理が高速になると教えられました。 例ですと Dim myDic As Object は、オブジェクトへの参照が実行されるまで何が入るか分からないですよね。 でも Dim myDic As Scripting.Dictionary なら、オブジェクトは明確に宣言されているので、処理が実行される前に変数の最適化が行われたり、コードを作成する時にオートメンバの機能などが使えます。 CreateObject関数を使うなら Dim myDic As Scripting.Dictionary Set myDic = CreateObject("Scripting.Dictionary") として使用したほうが事前に変数が最適化されているので処理が速くなるということです。 高速な処理を目指すなら細かいことですけど、使用する変数は、型を含めてきちんと宣言しておくと良いと思います。 (少なくとも私はそうしています。) ちなみに、CreateObject関数を使用するか、実際のオブジェクトを参照するかは、好みによるのかな?と思います。 「どちらが最適なのか」までは解説できる知識を持ち合わせていませんのであまり突っ込まないでくださいね。(^_^;) ではでは。

merlionXX
質問者

お礼

なんどもありがとうございます。 > Dim myDic As Scripting.Dictionary > Set myDic = CreateObject("Scripting.Dictionary") > として使用したほうが Microsoft Scripting Runtime を参照していない環境だと Dim myDic As Scripting.Dictionary がエラーになってしまいました。 Dim myDic As Object だとエラーになりません。 参照しない場合はDim myDic As Object でやるしかないということですね?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

んにちは。 >これで見た目には目的を達しているのですが、実際には0値が長さ0の文字列に変わっただけで完全な空白にはなっていません。 良く分からないですね。配列変数のVariant 型で、長さ0の文字列[""]であったとしても、  .Range("A4:AP" & x).Value = myAr としたら、[""]をセルに代入したら、空になってしまうのでは? 例えば、Range("A1").Value = "" は、A1 は、空のはずです。 それとも、何か入っているのですか? もし、セルに[""]を入れるなら、  Range("A1").Value = """""" '------------------------------------------- Sub EmptyTest1() Range("A1").Value = "" If IsEmpty(Range("A1")) Then   MsgBox "セルは空です。" Else   MsgBox "何か残っています。" End If End Sub '-------------------------------------------

merlionXX
質問者

お礼

わたしは何か、とんでもない勘違いをしていたようです。 計算結果で ="" になったセルを、コピーして値貼り付けした場合の現象が頭にあって、ためしもせずに質問してしまいました。 試したところWendy02さまのおっしゃる通りでした。 みなさま大変おさがわせいたしました。 ごめんなさい。

  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.4

こんにちは。No.3です。 > 実際は0値のみならずさまざまな条件で空白にしたいので それならDictionaryを使ってみては如何でしょうか? 'VBEのツール-参照設定で Microsoft Scripting RuntimeをチェックしてOK Dim myAr As Variant Dim x As Long, i As Long, n As Long Dim myDic As Scripting.Dictionary Set myDic = New Scripting.Dictionary '辞書にKey(照合値)とItem(Keyと一致したときの要素)を追加 '例えば0,1,3,5を空にする With myDic   .Add 0, Empty   .Add 1, Empty   .Add 3, Empty   .Add 5, Empty End With With ActiveSheet   x = .Range("A" & .Rows.Count).End(xlUp).Row   myAr = .Range("A4:AP" & x).Value   For i = LBound(myAr, 1) To UBound(myAr, 1)     For n = LBound(myAr, 2) To UBound(myAr, 2)       '辞書と照合してItem(ここではEmpty)を代入       If myDic.Exists(myAr(i, n)) Then myAr(i, n) = myDic(myAr(i, n))     Next n   Next i   .Range("A4:AP" & x).Value = myAr End With Set myDic = Nothing

merlionXX
質問者

お礼

ご丁寧にありがとうございます。 Dictionaryを使うことは思いもよりませんでした。 参考までに教えていただければ幸いですが、わたしがこれまで使ったことがあるDictionaryは、 Dim myDic As Object Set myDic = CreateObject("Scripting.Dictionary") のような記述ではじめるのですが、 Dim myDic As Scripting.Dictionary Set myDic = New Scripting.Dictionary これはどのような違いがあるのでしょうか? Newがついてるので何か違うのでしょうがわかりません。

  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.3

こんにちは。 置換したら如何でしょうか? Dim x As Long With ActiveSheet   x = .Range("A" & .Rows.Count).End(xlUp).Row   .Range("A4:AP" & x).Replace What:="0", Replacement:="", _     LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False End With

merlionXX
質問者

お礼

ありがとうございます。 たしかに質問の例の通り0値だけが対象ならこれでいけますね。 ただ、実際は0値のみならずさまざまな条件で空白にしたいので配列に取り込んだのです。 言葉足らずでもうしわけありませんでした。

  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.1

多分コードは組める方だと思うのでヒントだけ。 データを取り込んで、「取り込んだ範囲を".clear"」 あとは、データのある部分だけ書き込み、という方法は如何かと。

merlionXX
質問者

お礼

さっそくありがとうございます。 データのある部分だけ書き込み、とはこういうことでしょうか? これだとやはり個々にセルに入れるので時間がかかってしまいます。 Sub TEST0値2() Dim myAr With ActiveSheet x = .Range("A" & Rows.Count).End(xlUp).Row myAr = .Range("A4:AP" & x).Value .Range("A4:AP" & x).ClearContents For i = LBound(myAr, 1) To UBound(myAr, 1) For n = LBound(myAr, 2) To UBound(myAr, 2) If myAr(i, n) <> 0 Then .Range("A4:AP" & x).Cells(i, n) = myAr(i, n) Next n Next i End With End Sub

関連するQ&A

  • エクセルVBAでTransposeの不思議

    MS Officeのエクセル2000です。 下記Sub test01はRange("A1:I1")に文字列を入力し、一旦配列に取り込んでからワークシートに貼り付けるものです。 試験用のコードですので意味はありません。 このコードで255文字まではまったく問題はありません。 ところが、256文字以上の場合、横に貼り付けは問題ないのですが、 Transposeで縦に変換すると型が一致しません。(Error 13)となります。 どうしてでしょうか? 試行錯誤の結果、Sub test02のように一旦横に貼ったデータをコピーしてTransposeして貼り付けるのは大丈夫のようですので不思議でしょがありません。 またこの方法は列数256より要素が多い配列には使えないので解決策にはなりません。 ご教示くださいませ。 Sub test01() Dim myAr As Variant Dim i As Integer, n As Integer n = 256 '文字数 With ActiveSheet .UsedRange.ClearContents For i = 1 To 9 .Cells(1, i).Value = Application.Rept(Left(.Cells(1, i).Address(0, 0), 1), n) Next myAr = .Range("A1:I1").Value .Range("A3").Resize(, UBound(myAr, 2)).Value = myAr .Range("A5").Resize(UBound(myAr, 2)).Value = Application.Transpose(myAr) '256文字の場合エラー End With End Sub Sub test02() Dim myAr As Variant Dim i As Integer, n As Integer n = 256 '文字数 With ActiveSheet .UsedRange.ClearContents For i = 1 To 9 .Cells(1, i).Value = Application.Rept(Left(.Cells(1, i).Address(0, 0), 1), n) Next myAr = .Range("A1:I1").Value .Range("A3").Resize(, UBound(myAr, 2)).Value = myAr .Range("A3").Resize(, UBound(myAr, 2)).Copy .Range("A5").PasteSpecial Paste:=xlValues, Transpose:=True '256文字の場合もOK Application.CutCopyMode = False End With End Sub

  • エクセルVBAで配列の追加

    エクセル2000です。 1行4列のセル範囲のデータを配列に取り込んで、後から別の1行4列のセル範囲のデータを配列に追加し、2次元配列として吐き出そうと思います。 最初の範囲がA1:D1、追加範囲がA4:D4とした場合、こんな不細工なコードになってしまいました。 これでも動きますが、どう修正すべきでしょうか? Sub test() Dim myAr() myAr = Application.Transpose(Range("A1:D1").Value) ReDim Preserve myAr(1 To 4, 1 To 2) For i = 1 To 4 myAr(i, 2) = Cells(4, i) Next i Range("F1").Resize(UBound(myAr, 2), UBound(myAr, 1)).Value = Application.Transpose(myAr) End Sub

  • エクセルVBAで配列?

    以下は、文字列"t", "e", "s", "t"を配列に取り込み、セルに表示する例ですが、 ar = Array("t", "e", "s", "t") なら作動しますが、セル範囲から取り込もうと、 ar = Range("A1:D1").Value とするとエラーになります。 どうしてでしょうか? Sub test() Dim ar As Variant Dim n As Integer ar = Array("t", "e", "s", "t") 'ar = Range("A1:D1").Value For n = LBound(ar) To UBound(ar) Cells(n + 1, 5) = ar(n) Next n End Sub

  • VBA 配列について

    配列の使い方について教えてください 1つの配列をどんどん追加したりしたいので1つの mybox で追加していきたいと思っています。 (下記コードが実現できればと思います。) (1)配列を広げ追加したい (2)繰返しを使わず一気に書き込みたい (3)一部をクリアしたりしたい のですがよろしくお願いします。 Sub Macro1() Range("A1").Value = "A" Range("A2").Value = "B" Range("A3").Value = "A" o = Range("A1").End(xlDown).Row mybox = Range(Cells(1, 1), Cells(o, 1)).Value 'myBox(1,1)=A 'myBox(2,1)=B 'myBox(3,1)=A ←このような表示になります。 '------------------------------------------------- '(1)配列を広げ追加したい ReDim Preserve mybox(o, 2) For i = 1 To UBound(mybox) If mybox(i, 1) = A Then mybox(i, 2) = 0 Else mybox(i, 2) = 1 End If Next i '------------------------------------------------- '(2)(1)をC列に「myBox(?,2)を「繰返しを使わず一気に」書き込みたい 'Transposeは限界(65536個)を超えるので使えません。 Range(Cells(1, 3), Cells(UBound(mybox), 3)) = mybox '(3)配列myBox(?,1)は残したままmyBox(?,2)はクリアにしたい End Sub

  • EXCEL VBAの配列でわかりません。

    こんなコードがあるのですが、最後の他のシート(作業中シート)に書き込もうとするとエラーになってしまいます。”Sheets("作業中").”を抜くと同じシートに結果は返ってくるのですが…。コードの内容は、ある範囲のある列から空白ではないセルを探し出してその行のデータを配列で汲み取り、他のシートに一括で洗い出すというものです。 Sub 作業中() Dim myRow As Long Dim Data As Variant Dim WC() As Variant Dim WCE() As Variant myRow = Range("H1").CurrentRegion.Rows.Count Data = Range("H1:M" & myRow).Value For i = 1 To myRow If Data(i, 5) <> "" Then a = a + 1 Else b = b + 1 End If Next ReDim WC(a) ReDim WCE(b) c = 0 d = 0 For i = 1 To myRow If Data(i, 5) <> "" Then WC(c) = Range("H" & i & ":K" & i).Value c = c + 1 Else WCE(d) = Range(Cells(i, 8), Cells(i, 11)).Value d = d + 1 End If Next For i = 0 To a Range(Cells(i + 1, 15), Cells(i + 1, 18)).Value = WC(i) Next For i = 0 To b Range(Cells(i + 1, 19), Cells(i + 1, 22)).Value = WCE(i) Next e = Range(Cells(1, 15), Cells(a, 18)).Value Sheets("作業中").Range(Cells(1, 1), Cells(a, 4)).Value = e End Sub ちなみに同じシートから↓のコードを実行するとうまくいきます。 なぜ~??わからな~い??おしえてくださーい!! Sub test() Dim a As Variant a = Range("H1:K4") Sheets("作業中").Range("N1:Q4") = a End Sub

  • VBA DictionaryオブジェクトのItemについての質問です。

    エクセル2000です。 A列からE列までの1行から最終行不特定の表があります。 A列はすべて文字列で、B~Gは数値、E列は文字列です。 A列の文字列には重複があります。 この表を別シートにA列の重複がない表として作成したいと思います。 その際、列が重複する場合にはB~G列は合計数値、E列は文字列を結合させます。 Dictionaryオブジェクトを用い、A列データをKey、B~E列データを配列でItemとして下記のコードを書きました。 このコードで目的は達成しました。 質問はKeyが重複する場合、B~E列のデータを配列として取り込んだItemに次のB~E列のデータを加算あるいは結合する方法の簡略化です。 このコードではItem内の配列データを、さらに配列変数のmyArに代入して、要素ごとにForNextで回しましたが、配列変数にわざわざ代入しなくとも出来る方法があるかどうかが知りたいのです。 あるいはまったく別な方法でもかまいません。 ご教示いただければ幸いです。 Sub ItemsTest() Dim myDic As Object, ns As Worksheet '変数宣言 Dim c As Range, cc As Range, i As Integer Dim myAr Set myDic = CreateObject("Scripting.Dictionary") 'myDicを用意 For Each c In Range(Cells(1, "A"), Cells(Rows.Count, "A").End(xlUp)) 'A列の各データについて If Not myDic.exists(c.Value) Then 'myDicになければ myDic.Add c.Value, Array(c.Offset(0, 1).Value, c.Offset(0, 2).Value, c.Offset(0, 3).Value, c.Offset(0, 4).Value) '追加しB~E列データを配列でItemに Else 'myDicにあれば myAr = myDic(c.Value) 'Itemを配列myArに For i = LBound(myAr) To UBound(myAr) myAr(i) = myAr(i) + c.Offset(0, i + 1).Value '配列の要素ごとに加算 Next i myDic(c.Value) = myAr '配列myArをItemにもどす End If Next c '繰り返し Set ns = Worksheets.Add(After:=ActiveSheet) 'シートを追加 ns.Range("A1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Keys) 'A列にKeyデータ転記 For Each cc In ns.Range("A1:A" & myDic.Count) cc.Offset(0, 1).Resize(, UBound(myAr) + 1).Value = myDic.Item(cc.Value) 'B~E列にItemデータ転記 Next End Sub  (o。_。)oペコッ

  • 二次元配列のVBA

    二次元配列のVBAの書き方がよくわからないのですが、 私が作ったサンプルプログラムのSub 二次元()において 二次元配列で表すにはどうすればいいのでしょうか? Sub 二次元()では 配列を格納する変数はtmpしか使っていませんが もう一つ配列を格納する用の変数を作ればいいのでしょうか? 数字とアルファベットは別々に取り出したいです。 ----------------------------------------------------- Sub 一次元() Dim myStr As String Dim tmp As Variant Dim i As Long For i = 1 To 5 myStr = myStr & "," & i Next myStr = Mid(myStr, 2) tmp = Split(myStr, ",") For i = LBound(tmp) To UBound(tmp) Debug.Print tmp(i) Next i End Sub Sub 二次元() Dim myStr As String Dim tmp As Variant Dim i As Long For i = 1 To 5 myStr = myStr & "," & i & "と" & Chr(64 + i) Next myStr = Mid(myStr, 2) tmp = Split(myStr, ",") For i = LBound(tmp) To UBound(tmp) Debug.Print tmp(i) Next i End Sub

  • 配列に格納したデータを指定行以下に転記する方法

    excel2000を使っています。 以下のコードだと最終行にデータが転記されます。これを4行目に確定して、転記したいのです。常に4行目つまりA列4行目以下に上書きしたいのです。 その場合コードをどのように変更すべきでしょうか? Sub 配列() With ActiveSheet ' 配列に格納 --------------------------- Dim i As Integer Dim LastRow As Long Dim SaleAry As Variant ' 配列に格納 --------------------------- SaleAry = Array(.Range("t4"), .Range("e5"), .Range("g5"), .Range("o5")) End With ' 転記 --------------------------- With Worksheets("daityou") LastRow = .Range("A65536").End(xlUp).Row For i = 0 To UBound(SaleAry) .Cells(LastRow + 1, i + 1).Value = SaleAry(i) ' Next i End With Set SaleAry = Nothing End Sub

  • VBAのソートで

    お世話になります。 初歩的な質問なのですが・・。 表のソートをしたいのですが、 表は2行目に見出しがあり3列で100行の構成です。 下記の様な記述で表の範囲をセットするところでエラー がかかってしまうのですが、どうしたらうまくいくでしょうか。 どなたかご教示頂きたく宜しくお願い致します。    記 Sub ソート() Dim myrhg As Range Dim myar As Variant Dim i As Long Sheets("台帳").Range("A1").CurrentRegion.Select Selection.Offset(1, 0).Select Set myrng = Selection.Resize(Selection.Rows.Count - 1).Select myar = Array(1, 2, 3) With myrng For i = 0 To UBound(myar) .Sort key1:=Cells(1, myar(i)), Order1:=xlAscending, header:=xlYes Next End With Set myrng = Nothing End Sub

  • エクセルVBAで開いている他のアプリにデータ転記

    Sub TEST_Sendkey01() は、エクセルVBAでメモ帳を立ち上げ、データを転記するコードです。 期待通りに作動します。 http://okwave.jp/qa6760498.html Sub TEST_Sendkey01()   Dim App As String, tmp As String   Dim Ret, myAr   Dim i As Long, n As Long   App = "notepad.exe"   MsgBox App & "を実行します"   Ret = Shell(App, vbNormalFocus)   If Ret Then     AppActivate Ret, True   Else     MsgBox "失敗しました。"     Exit Sub   End If   myAr = Split("ABC101,BBB202,CCC303", ",")   For n = 1 To 2     For i = 0 To UBound(myAr)       SendKeys myAr(i)       SendKeys "{TAB}"       Application.Wait Time:=Now + TimeValue("00:00:01")     Next i     SendKeys "{ENTER}"   Next n   AppActivate Application.Name, False   MsgBox "終了しました。"   AppActivate Ret End Sub 質問は、あらたにメモ帳を立ち上げるのではなく、すでに開いている既存のメモ帳(TESTNOTE.txt)のデータに追加でデータを転記する方法です。 下記のようにしてみましたが、  AppActivate "TESTNOTEtxt - メモ帳" の段階で「実行時エラー5 プロシージャの呼び出し、または引数が不正です」となってしまいます。 どのように記述すればよいのでしょうか? Sub TEST_Sendkey02()   Dim myAr   Dim i As Long, n As Long   AppActivate "TESTNOTEtxt - メモ帳"      myAr = Split("D11,E22,F33", ",")   For n = 1 To 2     For i = 0 To UBound(myAr)       SendKeys myAr(i)       SendKeys "{TAB}"       Application.Wait Time:=Now + TimeValue("00:00:01")     Next i     SendKeys "{ENTER}"   Next n   AppActivate Application.Name, False   MsgBox "終了しました。"   AppActivate "TESTNOTEtxt - メモ帳" End Sub

専門家に質問してみよう