アプリ版:「スタンプのみでお礼する」機能のリリースについて

excelデータの加工をマクロ等で処理する方法を教えて頂けないでしょうか。

複数のエクセルデータのファイルがあります。
回数・距離・深さのデータが入っています。(回数は1回~10回位まであります)
そのデータを加工するのですが、マクロ等で迅速に処理できる方法がないものでしょうか?
マクロは実行する程度で作成した事はありません。。

加工作業は、
(1)「距離」と「深さ」の間に『間隔』という項目行を増やす。
(2)『間隔』の計算をする。(距離2回-1回・3回-2回・・のように計算します)間隔行の最終の回には“-”とおく。
(3)「回数」行の右端に『最小値』・『最大値』・『平均値』という項目列を増やす。
(4)『間隔』「深さ」の最小値・最大値・平均値を求める。(「距離」は求めないので“-”をおきます。
(5)「距離」と『間隔』行は小数点以下3桁にする。
(6)「深さ」行は小数点以下1桁にする。
(7) 罫線を引く

という流れなのですが、何かいい方法がありましたら教えて頂けないでしょうか?
宜しくお願い致します。

「excelデータの加工をマクロ等で処理す」の質問画像

A 回答 (3件)

|そのデータを加工するのですが、マクロ等で迅速に処理できる方法がないものでしょうか?


|マクロは実行する程度で作成した事はありません。。

この機会に
ぜひマクロを編集することを覚えた方がよいですね
手順が分かっているのなら
それぞれの手順でマクロの記録をして
編集すれば出来ますよ。
以下のように・・・

=================
とりあえずマクロ
「回数」と書いてあるセルが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
    • good
    • 0
この回答へのお礼

説明不足で申し訳なかったのですが、
この表でいう「間隔」だと3回目までで、深さは4回目までが計算範囲でした。
でもphoenix343さんの説明文があったおかげで、"ws.Cells(4, iCol)”の部分の番地(?)を編集して計算することができました。
本当にありがとうございました。とても感激しています。
マクロを一から作ってみたいのですが、独学では難しいですよね・・。
どこで覚えたらよいのか、何かアドバイスがありましたら、お聞かせ願いたい位です。

お礼日時:2010/03/14 00:05

#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])"
    • good
    • 0
この回答へのお礼

わざわざ補足して頂きありがとうございました。
さきほどの回答説明で十分伝わりましたので、自分でも数字を直せたので大丈夫でした。
自分では
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とするのが流れなんですね。
本当にご親切にありがとうございました。

お礼日時:2010/03/14 00:23

加工後に置き換えるならマクロのほうが速いかな


マクロの自動記録で記録し、VBEを使って修正します。

別案(といってもマクロにも利用可)は
最初に加工後の表を作っておきコピペで対処(値の貼り付けと罫線の貼り付け)と列の削除。
C9セル =IF(C3="","",C3) 右へオートフィル
C10セル =IF(D9="","-",D9-C9) 右へオートフィル
L10セルは -
C11セル =IF(C4="","",C4) 右へオートフィル
罫線や桁数などは整えておく
「excelデータの加工をマクロ等で処理す」の回答画像1
    • good
    • 0
この回答へのお礼

ありがとうございました。
勉強になります。

お礼日時:2010/03/14 00:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!