excelデータの加工をマクロ等で処理する方法を教えて頂けないでしょうか。
複数のエクセルデータのファイルがあります。
回数・距離・深さのデータが入っています。(回数は1回~10回位まであります)
そのデータを加工するのですが、マクロ等で迅速に処理できる方法がないものでしょうか?
マクロは実行する程度で作成した事はありません。。
加工作業は、
(1)「距離」と「深さ」の間に『間隔』という項目行を増やす。
(2)『間隔』の計算をする。(距離2回-1回・3回-2回・・のように計算します)間隔行の最終の回には“-”とおく。
(3)「回数」行の右端に『最小値』・『最大値』・『平均値』という項目列を増やす。
(4)『間隔』「深さ」の最小値・最大値・平均値を求める。(「距離」は求めないので“-”をおきます。
(5)「距離」と『間隔』行は小数点以下3桁にする。
(6)「深さ」行は小数点以下1桁にする。
(7) 罫線を引く
という流れなのですが、何かいい方法がありましたら教えて頂けないでしょうか?
宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
|そのデータを加工するのですが、マクロ等で迅速に処理できる方法がないものでしょうか?
|マクロは実行する程度で作成した事はありません。。
この機会に
ぜひマクロを編集することを覚えた方がよいですね
手順が分かっているのなら
それぞれの手順でマクロの記録をして
編集すれば出来ますよ。
以下のように・・・
=================
とりあえずマクロ
「回数」と書いてあるセルがA1とします。
Sub test()
Dim ws As Worksheet
Dim rge As Range
Dim iCol As Long
Dim brd As Border
Set ws = ActiveSheet
ws.Copy ws '複製
Set ws = ActiveSheet
'(1)「距離」と「深さ」の間に『間隔』という項目行を増やす。
ws.Cells(3, 1).EntireRow.Insert
ws.Cells(3, 1).Value = "間隔"
'(2)『間隔』の計算をする。(距離2回-1回・3回-2回・・のように計算します)間隔行の最終の回には“-”とおく。
iCol = 2
Do
If ws.Cells(1, iCol + 1).Value = "" Then
ws.Cells(3, iCol).Value = "-"
Else
Set rge = ws.Cells(3, iCol)
rge.FormulaR1C1 = "=R[-1]C[+1]-R[-1]C"
End If
iCol = iCol + 1
'次の列で回数が指定されていなかったら抜ける
If ws.Cells(1, iCol).Value = "" Then Exit Do
Loop
'(3)「回数」行の右端に『最小値』・『最大値』・『平均値』という項目列を増やす。
ws.Cells(1, iCol).Value = "最小値"
ws.Cells(1, iCol + 1).Value = "最大値"
ws.Cells(1, iCol + 2).Value = "平均値"
'(4)『間隔』「深さ」の最小値・最大値・平均値を求める。(「距離」は求めないので“-”をおきます。
ws.Cells(2, iCol).Value = "-"
ws.Cells(2, iCol + 1).Value = "-"
ws.Cells(2, iCol + 2).Value = "-"
ws.Cells(3, iCol).FormulaR1C1 = "=MIN(RC[" + CStr(2 - iCol) + "]:RC[-2])"
ws.Cells(3, iCol + 1).FormulaR1C1 = "=MAX(RC[" + CStr(2 - iCol) + "]:RC[-2])"
ws.Cells(3, iCol + 2).FormulaR1C1 = "=AVERAGE(RC[" + CStr(2 - iCol) + "]:RC[-2])"
ws.Cells(4, iCol).FormulaR1C1 = "=MIN(RC[" + CStr(2 - iCol) + "]:RC[-2])"
ws.Cells(4, iCol + 1).FormulaR1C1 = "=MAX(RC[" + CStr(2 - iCol) + "]:RC[-2])"
ws.Cells(4, iCol + 2).FormulaR1C1 = "=AVERAGE(RC[" + CStr(2 - iCol) + "]:RC[-2])"
'(5)「距離」と『間隔』行は小数点以下3桁にする。
Set rge = ws.Range(ws.Cells(2, 2), ws.Cells(3, iCol + 2))
rge.NumberFormatLocal = "0.000_ "
'(6)「深さ」行は小数点以下1桁にする。
Set rge = ws.Range(ws.Cells(4, 2), ws.Cells(4, iCol + 2))
rge.NumberFormatLocal = "0.0_ "
'(7) 罫線を引く
Set rge = ws.Range(ws.Cells(1, 1), ws.Cells(4, iCol + 2))
For Each brd In rge.Borders
brd.LineStyle = xlContinuous
brd.Weight = xlThin
brd.ColorIndex = xlAutomatic
Next
rge.Borders(xlDiagonalDown).LineStyle = xlNone
rge.Borders(xlDiagonalUp).LineStyle = xlNone
End Sub
説明不足で申し訳なかったのですが、
この表でいう「間隔」だと3回目までで、深さは4回目までが計算範囲でした。
でもphoenix343さんの説明文があったおかげで、"ws.Cells(4, iCol)”の部分の番地(?)を編集して計算することができました。
本当にありがとうございました。とても感激しています。
マクロを一から作ってみたいのですが、独学では難しいですよね・・。
どこで覚えたらよいのか、何かアドバイスがありましたら、お聞かせ願いたい位です。
No.3
- 回答日時:
#2ですが
最大値、平均値がうまく求まらないですね
すみません。。
'(4)
の箇所を
以下のように変更してください
ws.Cells(3, iCol).FormulaR1C1 = "=MIN(RC[" + CStr(2 - iCol) + "]:RC[-2])"
ws.Cells(3, iCol + 1).FormulaR1C1 = "=MAX(RC[" + CStr(2 - iCol - 1) + "]:RC[-3])"
ws.Cells(3, iCol + 2).FormulaR1C1 = "=AVERAGE(RC[" + CStr(2 - iCol - 2) + "]:RC[-4])"
ws.Cells(4, iCol).FormulaR1C1 = "=MIN(RC[" + CStr(2 - iCol) + "]:RC[-1])"
ws.Cells(4, iCol + 1).FormulaR1C1 = "=MAX(RC[" + CStr(2 - iCol - 1) + "]:RC[-2])"
ws.Cells(4, iCol + 2).FormulaR1C1 = "=AVERAGE(RC[" + CStr(2 - iCol - 2) + "]:RC[-3])"
わざわざ補足して頂きありがとうございました。
さきほどの回答説明で十分伝わりましたので、自分でも数字を直せたので大丈夫でした。
自分では
ws.Cells(3, iCol).FormulaR1C1 = "=MIN(RC[" + CStr(2 - iCol) + "]:RC[-1])"
ws.Cells(3, iCol + 1).FormulaR1C1 = "=MAX(RC[" + CStr(1 - iCol) + "]:RC[-2])"
ws.Cells(3, iCol + 2).FormulaR1C1 = "=AVERAGE(RC[" + CStr(0 - iCol) + "]:RC[-3])"
・・・
としてたのですが、CStr(2 - iCol)の部分は-1、-2とするのが流れなんですね。
本当にご親切にありがとうございました。
No.1
- 回答日時:
加工後に置き換えるならマクロのほうが速いかな
マクロの自動記録で記録し、VBEを使って修正します。
別案(といってもマクロにも利用可)は
最初に加工後の表を作っておきコピペで対処(値の貼り付けと罫線の貼り付け)と列の削除。
C9セル =IF(C3="","",C3) 右へオートフィル
C10セル =IF(D9="","-",D9-C9) 右へオートフィル
L10セルは -
C11セル =IF(C4="","",C4) 右へオートフィル
罫線や桁数などは整えておく
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- 統計学 風速を1秒刻みで推定する方法 6 2023/03/03 11:58
- その他(データベース) Accessフォームにて指定のフィールドの平均値を小数点第一位で表示できない 2 2022/08/30 17:19
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
- Excel(エクセル) 単価シートから単価をエクセル関数で自動取得する方法 1 2023/07/02 22:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
特定のPCだけ動作しないVBAマク...
-
メッセージボックスのOKボタ...
-
EXCELのVBAでRange("A1:C4")を...
-
ExcelのVBA。public変数の値が...
-
一つのTeratermのマクロで複数...
-
マクロの連続実行
-
TERA TERMを隠す方法
-
Excel VBAからAccessマクロを実...
-
ピボットテーブルでの毎回可変...
-
VBAのIF分で時間指定の条件式の...
-
OnTimeを使ったのですが「エラ...
-
エクセルでキーリストからデー...
-
TeraTermマクロの文字列結合
-
エクセルに張り付けた写真のフ...
-
ExcelVBAでPDFを閉じるソース
-
VBA初心者 Ctrl+での操作、ボタ...
-
EXCELのマクロの重複起動...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
他人が作ったマクロの理解
-
ExcelVBAでPDFを閉じるソース
-
TERA TERMを隠す方法
-
エクセルで別のセルにあるふり...
-
マクロ実行時、ユーザーフォー...
-
Excel VBAからAccessマクロを実...
-
EXCELのVBAでRange("A1:C4")を...
-
TeraTermマクロの文字列結合
-
PDF出力マクロについて。マクロ...
-
#defineの定数を文字列として読...
-
エクセルのマクロをセルの値に...
-
wordを起動した際に特定のペー...
おすすめ情報