1
Range1.Copy
Range2.PasteSpecial Paste:=xlPasteFormulas, SkipBlanks:=True

Range1とが同じ次元の場合Range2、このコードは問題なく実行されます。コピーした範囲内の数式がターゲット範囲に挿入されることが期待されますが、空白のセルにRange1は数式がコピーされずRange2、代わりに現在のセル値がそのまま残ります。

これが結合されたセルで失敗することを発見しました。以下の画像は、組み込みの Paste Special UI を使用した同等のアクションを示していますが、同じ方法で失敗します。

空白のスキップが失敗する

ループを伴わないエレガントな回避策を考えられる人はいますか?

不要なセルを空白 (空の) 値で上書きするため、単純にバリアントを使用するだけでRange1.Formula = Range2.Formulaは不十分であることに注意してください。Range2


他に完璧な解決策がないように思われるため、ループなしの制限を削除しました。

4

3 に答える 3

1

以下はテスト済みで、動作するようです。

仮定:

  • 投稿の最初の行のセルはA1:E1.
  • 投稿の緑色で強調表示された行のセルはA2:E2です。
  • 部分的に上書きする必要がある範囲は、4 行目 ( A4:E4) です。
  • セル A2:E2 の内容を cell まで複製しましたQ2。マージF2:G2されて空白、H2空白、I2「コピー」など、(「コピー」がある)まで続きQ2ます。メソッドが複数のマージされた領域で機能することを確認したかっただけです。

    Sub skipBlanksWithMergedCells()
        Dim rngOrigin As Range, rngDestination As Range, rngSkip As Range
        Dim varTemp As Variant
    
        Set rngOrigin = Range("A2:Q2")
        Set rngDestination = Range("A4:Q4")
        ' Set pointer to range that needs to be skipped
        Set rngSkip = rngOrigin.SpecialCells(xlCellTypeBlanks).Offset(2, 0)
        ' Store its values into a variant
        varTemp = rngSkip.Value
        rngOrigin.Copy
        rngDestination.PasteSpecial xlPasteFormulas
        ' Revert original values from the variant
        rngSkip.Value = varTemp
    End Sub
    

これは、rngSkip厳密な数値またはテキストが含まれている場合は機能しますが、数式が含まれている場合は失敗します。その場合、数式の部分範囲へのポインターを設定し、それらを別のバリアントに格納する必要がありvarTempFormulas=range.formulaますrange.formula=varTempFormulas

これが役立つことを願っています。

于 2013-07-05T00:09:52.360 に答える