[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『相対参照に変換』(くろ)
いつもお世話になってます。
2点質問があります。
1.相対参照に変換する(下記マクロ)と「実行エラー13 型が一致しません」と出るのですが「J/K/L]列のみエラーになります。
原因は何でしょうか?
2.相対参照にしたい行がこの他(4:34)に
41:71
78:108
115:145
152:182
189:219
226:256
263:293
300:330
337:367
374:404
411:441
にも同じ処理をしたいのですが飛び飛びの行の場合どのように書いたらいいのでしょうか?
Option Explicit
Function 書式設定()
Dim myDate As Date Dim i As Integer Dim w As Integer Dim e As Integer Dim crItem2 As Date Dim copyFrom As Range Dim pos As Range Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet
Set sh1 = Sheets("設定") Set sh2 = Sheets("原本") Set sh3 = Sheets("集計")
With Sheets("原本") With .Range("4:34") .Columns("H").Resize(.Rows.Count).Formula = Application.ConvertFormula(.Columns("H").Resize(.Rows.Count).Formula, xlA1, xlA1, xlRelative) .Columns("J").Resize(.Rows.Count).Formula = Application.ConvertFormula(.Columns("J").Resize(.Rows.Count).Formula, xlA1, xlA1, xlRelative) .Columns("K").Resize(.Rows.Count).Formula = Application.ConvertFormula(.Columns("K").Resize(.Rows.Count).Formula, xlA1, xlA1, xlRelative) .Columns("L").Resize(.Rows.Count).Formula = Application.ConvertFormula(.Columns("L").Resize(.Rows.Count).Formula, xlA1, xlA1, xlRelative) .Columns("AK").Resize(.Rows.Count).Formula = Application.ConvertFormula(.Columns("AK").Resize(.Rows.Count).Formula, xlA1, xlA1, xlRelative) .Columns("AM").Resize(.Rows.Count).Formula = Application.ConvertFormula(.Columns("AM").Resize(.Rows.Count).Formula, xlA1, xlA1, xlRelative) .Columns("AO").Resize(.Rows.Count).Formula = Application.ConvertFormula(.Columns("AO").Resize(.Rows.Count).Formula, xlA1, xlA1, xlRelative) .Columns("AQ").Resize(.Rows.Count).Formula = Application.ConvertFormula(.Columns("AQ").Resize(.Rows.Count).Formula, xlA1, xlA1, xlRelative) .Columns("AT").Resize(.Rows.Count).Formula = Application.ConvertFormula(.Columns("AT").Resize(.Rows.Count).Formula, xlA1, xlA1, xlRelative) .Columns("AV").Resize(.Rows.Count).Formula = Application.ConvertFormula(.Columns("AV").Resize(.Rows.Count).Formula, xlA1, xlA1, xlRelative) .Columns("AY").Resize(.Rows.Count).Formula = Application.ConvertFormula(.Columns("AY").Resize(.Rows.Count).Formula, xlA1, xlA1, xlRelative) End With End With
End Function
< 使用 Excel:Excel2013、使用 OS:Windows7 >
>>1.データシートを見ないと何とも…。セル連結とか、空欄とか?
結合とか空欄はないのですが。。。
関数が長いからとか影響はありますか?
因みに関数は
With Sheets("原本") With .Range("4:34") .Columns("J").Resize(.Rows.Count).Formula = "=IF(COUNT(C4:D4)<2,"""",IF(OR(COUNTIF(祝日,A4)=1,WEEKDAY(A4)=1,WEEKDAY(A4)=7),"""",IF(AND(C4>$AJ$2,OR(E4<>"""",F4<>"""")),TEXT(MAX(0,I4-S4),""h:mm"")*1,TEXT(MAX(0,MIN(D4+(C4>D4),$AJ$3)-MAX(C4,$AJ$2))+MAX(0,MIN(D4+(C4>D4),$AL$3)-MAX(C4,$AL$2)),""h:mm"")*1)))" .Columns("K").Resize(.Rows.Count).Formula = "=IF(COUNT(C4:D4)<2,"""",IF(OR(COUNTIF(祝日,A4)=1,WEEKDAY(A4)=1,WEEKDAY(A4)=7),"""",IF(AND(C4>$AJ$2,OR(E4<>"""",F4<>"""")),IF(D4+(C4>D4)-C4>=""20:15""*1,TEXT(I4-J4-L4,""h:mm"")*1,TEXT(MIN(I4-J4,""4:""*1),""h:mm"")*1),TEXT(MAX(0,MIN(D4+(C4>D4),$AN$3)-MAX(C4,$AN$2))+MAX(0,MIN(D4+(C4>D4),$AS$3)-MAX(C4,$AS$2))+MAX(0,MIN(D4+(D4>D4),$AX$3)-MAX(C4,$AX$2)),""h:mm"")*1)))" .Columns("L").Resize(.Rows.Count).Formula = "=IF(COUNT(C4:D4)<2,"""",IF(OR(COUNTIF(祝日,A4)=1,WEEKDAY(A4)=1,WEEKDAY(A4)=7),"""",IF(AND(C4>$AJ$2,OR(E4<>"""",F4<>"""")),IF(D4+(C4>D4)-C4>=""20:15""*1,TEXT(MIN(I4-J4,""5:""*1),""h:mm"")*1,TEXT(I4-J4-K4,""h:mm"")*1),TEXT(MAX(0,MIN(D4+(C4>D4),$AP$3)-MAX(C4,$AP$2))+MAX(0,MIN(D4+(C4>D4),$AR$3)-MAX(C4,$AR$2))+MAX(0,MIN(D4+(C4>D4),$AU$3)-MAX(C4,$AU$2))+MAX(0,MIN(D4+(C4>D4),$AW$3)-MAX(C4,$AW$2)),""h:mm"")*1)))"
End With
End With
>>2.規則性があるようなので、For文で Step 37 として範囲文字列を作るとか?
その場合「With .Range("4:34")」をどのようにループしたらいいのか分からないのですが
ご教授よろしくお願いします。
(くろ) 2016/09/02(金) 19:09
こんばんわ。
1に関しては、範囲が5つくらいのセルまでならエラーにならないんですね。
あまり詳しくないので推測になりますが、数式が長いので1度に処理できる文字数制限などに引っかかってるんでは無いでしょうか?
ご提示のコードなら結果は$のみを消すだけになると思うので、以下のようにしても同じ結果になります。 以下ならご提示の式ではエラーになりません。
Range("4:34").Columns("J:L").Replace What:="$", Replacement:="", LookAt:=xlPart
後全ての箇所の .Resize(.Rows.Count) は必要ないです。
2に関しては、以下のようなループにすれば良いと思います。
Dim i As Long
For i = 4 To 411 Step 37 With Rows(i).Resize(31) .Columns 〜のコード End With Next i
(sy) 2016/09/02(金) 20:48
回答ありがとうございます。
$を消すだけだから置換でも可能なんですね!
盲点でした。
ループのコードもありがとうございます。
セルの指定の仕方がたくさんあって中々覚えられてません。
質問項目ではない
「.Resize(.Rows.Count)は不要」のアドバイスもありがとうございます。
Resize Range の使い方をもう一度復習したいと思います。
すべて解決しました。
ありがとうございました。
また機会があればよろしくお願いします。
(くろ) 2016/09/03(土) 10:02
エラーの原因は、数式の長さみたいです。
(2016/09/02(金) 19:09)のコードを実行すると
J4の数式の文字数は243
k4の数式の文字数は344
J4の数式をConvertFormulaで変換することはできますが
k4の数式を同じように変換しようとするとエラーになります。
以下のコードは、J4,K4の数式を取得して
ConvertFormulaで変換したものをメッセージボックスに
表示します。
Sub MACRO()
Dim myF1 As String
Dim myF2 As String
myF1 = Cells(4, "j").Formula
myF2 = Cells(4, "k").Formula
MsgBox _
Application.ConvertFormula(myF1, xlA1, xlA1, xlRelative)
'↑変換元の数式をmyF1からmyF2に変更するとエラーになります。
End Sub
(カイル) 2016/09/04(日) 10:16
Sub マクロ2()
Dim myF1 As String
Dim myF2 As String
Dim flg1, flg2
myF1 = Cells(4, "j").Formula
myF2 = Cells(4, "k").Formula
flg1 = _
Application.ConvertFormula(myF1, xlA1, xlA1, xlRelative)
flg2 = _
Application.ConvertFormula(myF2, xlA1, xlA1, xlRelative)
MsgBox IsError(flg1) & vbCrLf & IsError(flg2)
End Sub
(カイル) 2016/09/04(日) 12:48
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.