独学でVBAを学んだ者です。
専門用語などが分からない部分がありますが、質問させてください。
処理の流れ
Do~Loop中に変数を使ってROUNDDOWN関数を相対参照でセルにセットし、最後に$を置換して相対参照にして並べ替えます。
置換ができる時とできない時があり、並べ替えた時に絶対参照になっていて、セル参照がぐちゃぐちゃになってしまします。
下記どちらかで問題を解消したいです。
①相対参照で関数をセット
②置換コードが無視される原因
Do
’セルにROUNDDOWN関数をセット
Cells(IY, 12).Formula = "=" & "ROUNDDOWN(" & Cells(IY, 8).Address & "*" & Cells(IY, 11). Address & ",0)"
Loop
’$を置換
Range("B4:P" & IY - 1).Replace What:="$", Replacement:="", LookAt:=xlPart, MatchCase:=True
’並び替え
Range("B4:P" & IY - 1).Sort key1:=Range("D4"), order1:=xlAscending, Header:=xlYes
知恵を貸していただければと存じます。
よろしくお願い申し上げます。
No.1ベストアンサー
- 回答日時:
こんにちは
何をどうしたいのかよくわかりませんけれど・・・
>並べ替えた時に絶対参照になっていて、セル参照がぐちゃぐちゃになってしまします。
一般的に、相対参照の関数がセットされたセルを並び替えると、セル位置が移動することで参照先が変わってしまうため、並び替え結果が意図通りならないことが多いはずです。
(手動でいろいろテストしてみればわかると思います)
普通にイメージされる並び替えであるなら、相対参照関数の場合は値を固定化しておく必要があります。
簡単な方法として、
・絶対参照にする
・コピー → 値をペーストなどで値にする
などでしょうか・・・
対象セルの内容を変更したくない場合は、別に作業列を設けてそちらで値を固定化して、その列をkeyにして並べ替えた上で削除してしまえば、元の値は保持できます。(とは言え、相対参照だと値が変わる可能性は大ですが)
以下は、ご質問と関係あるか無いかも不明ですが・・・
>Do
> ’セルにROUNDDOWN関数をセット
なんとなく、「相対参照の式のセット」が目的のように思えるのですが、もしそうなら、ループや置き換えをしなくても、簡単に設定可能です。
例えば、B1:B10に同じ行のA列への参照式を設定したい場合、
Range("B1:B10").FormulaLocal = "=A1"
とすることで、まとめて設定ができます。
また、ADDRESS属性は
Range().Address() では絶対参照
Range().Address(0, 0) では相対参照
のアドレスを返しますので、わざわざ置き換える必要も無いように思います。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
質問が下手で申し訳ありませんでした。
はい、おっしゃる通り「相対参照の式のセット」が目的でした。
ADDRESS属性についてもありがとうございます!
使い方が分かりませんでしたが、.Addressの後ろに(0, 0)で相対参照になりました!
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) Excel vba で1と10を正確に判断させる方法を教えてください。 TからU列に1と入力があれば 3 2022/12/26 16:54
- Excel(エクセル) Excelでなぜこのような式をつかっているのでしょうか、行に1,2,3と連番を振るだけなのに 5 2023/04/08 20:00
- Excel(エクセル) エクセルの複数のセルを一括で絶対参照にする方法 3 2023/06/14 15:57
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Visual Basic(VBA) 正規表現を用いての並び替え 7 2022/04/04 09:27
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルが空白だったら、そ...
-
ExcelVBAを使って、値...
-
【Excel VBA】指定行以降をクリ...
-
【Excel】指定したセルの名前で...
-
i=cells(Rows.Count, 1)とi=cel...
-
特定の文字を条件に行挿入とそ...
-
DataGridViewの各セル幅を自由...
-
Excel vbaで特定の文字以外が入...
-
Excelのプルダウンで2列分の情...
-
Excelのハイパーリンクにマクロ...
-
【VBA】シート上の複数のチェッ...
-
Excelで指定した日付から過去の...
-
実行時エラー438 オブジェクト...
-
指定した条件で範囲選択したい
-
EXCELで変数をペーストしたい
-
VBAを使用した時間管理
-
EXCELのVBA-フィルタ抽出後の...
-
VBA初心者です。結合セルを保持...
-
UWSCで値のみコピーするには?
-
DataGridViewのセルのItem設定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel VBA】指定行以降をクリ...
-
Excelで指定した日付から過去の...
-
【Excel】指定したセルの名前で...
-
Excel vbaで特定の文字以外が入...
-
特定の文字を条件に行挿入とそ...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
Excelのプルダウンで2列分の情...
-
EXCELで変数をペーストしたい
-
連続する複数のセル値がすべて0...
-
Excel VBA、 別ブックの最終行...
-
VBAを使用した時間管理
-
エクセルVBAでコピーして順...
-
セル色なしの行一括削除
-
【EXCEL VBA】Range("A:A").Fi...
-
VBA コピーして次の値まで貼り...
-
VBA初心者です。結合セルを保持...
おすすめ情報