枝番号の一番大きいファイルパス("C:\Documents and Settings\集計ファイル_3.xls")を引数で受け取り、
数式セルを対象にフォントカラー番号よって、
シート内参照の数式、もしくはブック間の3D集計をセルに入力する
モジュールを作成しています。
現在実行に1時間以上かかってしまい困っているのですが、
なんとか改善する方法をご存知ないでしょうか?
アイデアだけでもかまいませんので、是非何かご教授よろしくお願いいたします。
'引渡値 oTargetSheet :処理対象のシート
'引渡値 s3DFormura :集計したい枝番最大ブックのパス
Dim oFomulaRange As Range
Dim oFomulaCell As Range
Dim sFormura As String
Dim sCurrentFile As String
Dim iMaxFileNo As Integer
Dim iFileNameStart As Integer
Dim i As Integer
'数式セルのみ選択します
Set oFomulaRange = oTargetSheet.Cells.SpecialCells(xlCellTypeFormulas, 23)
'引数より枝番号を取得 例)3
iMaxFileNo = CInt(Mid(s3DFormura, Len(s3DFormura) - 4, 1))
'ブックが1つしかない場合は何もせずExit
If iMaxFileNo = 1 Then Exit Sub
'ブック間集計の場合のブックパス途中までをセット
'例)"C:\Documents and Settings\[集計ファイル_"
iFileNameStart = InStrRev(s3DFormura, "\")
sCurrentFile = sCurrentFile & "'" & Left(s3DFormura, iFileNameStart) & "["
sCurrentFile = sCurrentFile & Mid(s3DFormura, iFileNameStart + 1, Len(s3DFormura) - iFileNameStart - 5)
For Each oFomulaCell In oFomulaRange
With oFomulaCell
Select Case .Font.ColorIndex
Case 10
'数式の生成
sFormura = "=SUM("
For i = 1 To iMaxFileNo
If i > 1 Then sFormura = sFormura & ","
sFormura = sFormura & sCurrentFile & i & ".xls]計'!"
sFormura = sFormura & .Address(ReferenceStyle:=xlR1C1)
Next i
sFormura = sFormura & ")"
'セルに数式を入力
'例)=SUM('C:\Documents and Settings\[集計ファイル_1.xls]計'!!$A$1
' ,'C:\Documents and Settings\[集計ファイル_2.xls]計'!!$A$1
' ,'C:\Documents and Settings\[集計ファイル_3.xls]計'!!$A$1)
.Formula = sFormura
Case 14
'文字色を緑に変更
.Font.ColorIndex = 10
'10と同じ処理
sFormura = "=SUM("
For i = 1 To iMaxFileNo
If i > 1 Then sFormura = sFormura & ","
sFormura = sFormura & sCurrentFile & i & ".xls]計'!"
sFormura = sFormura & .Address(ReferenceStyle:=xlR1C1)
Next i
sFormura = sFormura & ")"
.Formula = sFormura
Case 43
'文字色を青に変更
.Font.ColorIndex = 5
'=IF(数量<>0,ROUNDUP(金額/数量,0),0)
.FormulaR1C1 = "=IF(RC[1]<>0,ROUNDUP(RC[2]/RC[1],0),0)"
End Select
End With
Next
こんにちは。
どなたか教えていただけませんか?
車両別に毎日の日報データを入力するシートがあるのですが、
入力作業をするのがExcel初心者の人なので、関数が入っているセルを、
上書き・消去しないよう保護をかけて入力可能なシートのみ選択・入力できるようにしてあります。
1ヶ月ごとに入力したデータを消去し、新たなデータを入力していくのですが、
ロックされていないセルのデータだけを一括で消去出来るマクロがないかと探しています。
過去ログで
Sub Cellsdel()
Dim c As Range
For Each c In Sheets("Sheet1").Range("A5:D10")
If c.Locked = False Then
c.ClearContents
'c.Clear '書式も含めて、全て消すならこれ一行
End If
Next
End Sub
というマクロを見つけたのでカスタマイズして試してみましたが、
実行時エラー1004
結合されたセルの一部を変更することは出来ません
となってしまいました。
入力するシートはC4:Z100までが1台分、以下、Z1200まで12台分の車両別に分かれていて、
入力するセルは飛び飛びになっています。
この説明では不足していると思いますが、補足をいたしますので、
どなたかご教授頂けないでしょうか?
マクロはまだ初心者で色々と勉強している最中です。
よろしくお願いいたします。