• ベストアンサー

EXCELの表で再質問です。

先日は即答ありがとうございました。 ですが、実行ができませんでした。 登録方法すら分っていないため、間違っているのかもしれないので、再度質問です。ごめんなさい。 あと、VBAに登録しようとしたら、すでに他のプログラムが入っていました。 とりあえずツールバーの挿入→標準モジュールにしたら新規のシートが出てきたので、前回4/9に回答いただいたTTakさんのプログラムをコピーして貼り付けてみました。 その後実行をかけると「実行時エラー"g": インデックスが有効範囲にありません」とでます。同様にmoon00さんに作っていただいたのも同じエラーがかかります。 この時、デバックを選択したら「Sheets("測定結果").Select」が黄色く反転しました。 前回の質問に補足として、測定に使用しているソフトは「かんたん計測98」というものです。 表示されるファイル内には「測定標題」「測定結果」という2つのシートがあり、測定結果の方に表示がなされます。それを「BL」シートにコピーをしています。 これ以上ソフトの内容をお伝えしていいものかどうか分りませんので、とりあえず差し障りなさそうなとこだけ書いてみました。 度々申し訳ありませんが、宜しくお願いします。

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

  • ベストアンサー
  • TTak
  • ベストアンサー率52% (206/389)
回答No.3

まず、シート"測定結果"が存在するかを確かめてください。消えていたりシート名が変わっていた場合は、そのソフトの取説を読んで復旧してください。シート"BL"は同一ファイル内ということなので、マクロ内にファイル名は必要ありませんでした。新しいマクロは下記の通りです。このマクロはシート"測定結果"のG14:I22の値を、シート"BL"の4列名以降に5列おきに追加していくものです。シート"測定結果"のデータが更新されるごとに1回実行してください。 Sub Macro1() Dim datCol As Integer Dim i As Integer Set sheetBL = ThisWorkbook.Sheets("BL") With sheetBL  datCol = .Range(.Cells(14, .Columns.Count). _   End(xlToLeft).Address).Column    If datCol > 248 Then     MsgBox "これ以上データ追加できません。"     Exit Sub    End If  For i = 4 To 248 Step 4   If .Cells(14, i).Value = "" Then    .Range(.Cells(14, i), .Cells(22, i + 2)).Value _    = Sheets("測定結果").Range("G14:I22").Value    Exit For   End If  Next i End With Set sheetBL = Nothing End Sub 注意 シートBLの"BL"は半角としています。 もし、シート"測定結果"のデータが自動更新されるような仕様の場合は、上記マクロを”サブルーチン”として実行するように、「かんたん計測」側のマクロコードを変更する必要があります。そのような場合は、詳細をここでお教えすることは難しいです。

nanami0310
質問者

お礼

ありがとうございます! すごいです!できましたよ!動きましたよ!!!! めちゃめちゃ感動してます。本当にありがとうございます。 これで余計な手間が省けます。この作業、100個も続くと結構時間食うんですよね~嬉しいです! ちなみにです・・・ このVisual Basic画面の保存終了の仕方と、こないだ言ってたボタン化の仕方も教えていただけると幸いです。 手間かけさせてごめんなさい。 宜しくお願いします。

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

その他の回答 (3)

  • aieeen
  • ベストアンサー率12% (7/54)
回答No.4

前回のが分からないので、 >同ファイル内に存在します。 同じbook内には無いと解釈します。 「BL」で必要な別bookのシートを「BL」に貼り付けたら、問題なく出来ますか? まず、「BL」にシート名"測定結果貼付"を追加します。 下記のVBAでソフト会社が用意した測定結果を 自分で作った「BL」に貼り付けてしまいます。 Sub sample() Dim wsSrc As Worksheet, WS As Worksheet Dim PasteR As Range Dim x As Long Sheets("測定結果貼付").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select   Set wsSrc = ActiveSheet Workbooks.Open "測定結果.xls" For Each WS In Worksheets x = WS.Range("A1").CurrentRegion.Rows.Count If WS.Index = 1 Then Set PasteR = wsSrc.Range("A1") Else Set PasteR = wsSrc.Range("A65536").End(xlUp).Offset(1) End If WS.Range(WS.Cells(1, 1), WS.Cells(x, 44)).Copy PasteR Set PasteR = Nothing Next ActiveWorkbook.Close False Set wsSrc = Nothing End Sub 注意!テストはコピーして失敗しても影響のない環境で行って下しい。 ソフト会社が用意した「測定結果」はエクセルで出来ていてシートが1つにか存在しない事、仮に全て所得してしまったら削除する方法を考えて下さい。

nanami0310
質問者

お礼

ありがとうございます。 >同じbook内には無いと解釈します。 いえ、あるんです。ちゃんと・・・ TTakさんのプログラムで動いてくれましたので、今回はこちらにて作業させていただくことにしました。 お時間かけさせてしまって申し訳ありません。でも、ありがとうございました。 また何かありましたら宜しくお願いします。

すると、全ての回答が全文表示されます。
  • trytrytry
  • ベストアンサー率37% (13/35)
回答No.2

>その後実行をかけると「実行時エラー"g": インデックスが有効範囲にありません」とでます。 実行時エラー'9'では無いでしょうか? Sheets("測定結果").Selectが反転との事ですので、シートが存在していないと思われます。 シート名をダブルクリックでコピペしても同じ「測定結果」となりますか? スペースとか記号とかが前後についているとか無いですか?

nanami0310
質問者

補足

ありがとうございます。 >実行時エラー'9'では無いでしょうか? かも・・・というかそうなんでしょうね(^^;)すいません。 >シート名をダブルクリックでコピペしても同じ「測定結果」となりますか? なります。1度目に手入力した時もこれが出たので、コピーしてきたのですが、結果は同じでした。

すると、全ての回答が全文表示されます。
  • TTak
  • ベストアンサー率52% (206/389)
回答No.1

マクロの登録の方法は > ツールバーの挿入→標準モジュールにしたら新規のシート~コピーして貼り付けてみました。 でokです。 まず > Sheets("測定結果").Select というコードでストップしているということは、測定結果というシートが無いか、別のファイルがアクティブになっていると考えられます。「BL」というシートは、「測定標題」「測定結果」などと同じファイルに用意したシートでしょうか?それとも別のファイルのシートですか? もし良ければ、「測定結果」シートがあるファイルと、「BL」シートがあるファイル名を教えてください。 それから、以前紹介したマクロはすべて削除してください。

nanami0310
質問者

補足

お世話になります。 C:\Program Files\Kantan98\Hyouji\測定結果P236_自動化試作_9分割中央 がファイル名です。 「測定標題」「測定結果」の2シートがソフト会社が用意したもので、「BL」シートは私が追加したシートで、同ファイル内に存在します。 削除完了しました。 お願いします。

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

関連するQ&A