• ベストアンサー

EXCELで表を加工したいのですが・・・

業務の効率化を図りたいのですが、EXCELで出来るのでしょうか? あるソフトを使って測定したデータが、EXCELに読み込まれ、シートのG14:I22に表示されます。(ここまでは業者さんのソフトのため、変更は出来ません) 複数のサンプルを測定する場合は、毎回そこに上書きで表示されていくため、別ファイルのフォーマットにデータを「値のみ貼付け」でコピーしています。 貼付ける場所は、1つ目のデータはD14:F22、2つ目はH14:J22というように、場所が決まっています。 なんとか、この貼付けるという作業を自動化したいと思いますが、出来ますでしょうか? 測定のデータ(G14:I22に表示されたもの)が、次の測定データと全く同じ値になるということはありません。 ですので、G14:I22が新しい値に変わったらコピーするという設定で、加えて、貼付けるシートのD14:F22に値が入っていたら次のH14:J22に貼付けるというわがままな設定も可能でしょうか? どうか、宜しくお願い致します。

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

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

この作業の自動化にはVBAが必要です。 測定データが先頭のシートに読み込まれるものとして、コードを組んでみました。測定データがどのようなタイミングで上書き表示されていくかは分かりませんので、とりあえず新しいデータが読み込まれたら、下記マクロ(Macro1)を手動実行してください。ボタンにマクロを登録してもいいです。 Sub Macro1()  Dim sn As Integer  Dim incertCul As Integer  sn = ActiveWorkbook.Sheets.Count  Sheets(sn).Activate  If Mycul(14) > 250 Or sn = 1 Then   Sheets.Add After:=Sheets(sn)   ActiveSheet.Name = "dat" & sn - 1  End If  With ActiveSheet    .Name = "dat" & _    ActiveWorkbook.Sheets.Count - 1    incertCul = Mycul(14)    If incertCul = 1 Then      incertCul = 4    Else      incertCul = incertCul + 2    End If    .Range(.Cells(14, incertCul), .Cells(22, incertCul + 2)).Value _      = Sheets(1).Range("G14:I22").Value  End With End Sub Function Mycul(cellsRow As Integer) As Integer Mycul = Range(Cells(cellsRow, ActiveSheet.Columns.Count) _ .End(xlToLeft).Address).Column End Function このマクロは、勝手に"dat?"(?は任意の数字)というシートを追加して、そこにデータを書き込んでいきます。250列以上になると新しくシートを追加して、同様に書き込むようになっています。とりあえず考えた範囲で作ってみましたんで、修正・追加があったらおしらせください。 excel2000で動作確認

nanami0310
質問者

お礼

早い回答ありがとうございます! やはりVBAになるんですね。とりあえず、動作確認を明日にはできると思いますので、何か合ったらまたお願いします。 ありがとうございました。

その他の回答 (1)

  • moon00
  • ベストアンサー率44% (315/712)
回答No.2

マクロを使えば可能だと思います。 サンプルを書いてみました。 Sheet1に元データ、転記先をSheet2として Sub Macro1() Dim i As Integer Application.ScreenUpdating = False '該当エリアの値をコピー Sheets("Sheet1").Select Range("G14:I22").Select Selection.Copy 'コピーする位置を検出 Sheets("Sheet2").Select i = 4 Do While Cells(14, i) <> "" i = i + 4 Loop Cells(14, i).Select Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False 'コピーした先頭位置をアクティブに Cells(14, i).Select Application.ScreenUpdating = True End Sub 元データ、転記先を書き換えれば動くと思います。 追記はG行→H行→L行と4行置きと考えました。 このマクロをボタン化して、データを書き換えたときに 押すということにすればどうでしょう?

nanami0310
質問者

お礼

日本語が入ってて分りやすいです。 ありがとうございました。 動作確認して、また何かありましたらお願いします。

関連するQ&A