DOBON.NETプログラミング道掲示板

[ 最新記事及び返信フォームをトピックトップへ ]

■33818 / inTopicNo.1)  EXCELでクリップボードを使用せずに書式付きでセルをコピー
  
□投稿者/ わかきつ 一般人(1回)-(2018/03/05(Mon) 18:56:14)
  • アイコン環境/言語:[VB.NET2010 .NetFramework3.5 EXCEL2010] 
    分類:[.NET] 

    VB.NET2010でInteropを使用してEXCEL2010を操作しています。
    (COMの解放はできていると思っています。)

    今回、クリップボードを使用せずに書式付きでセルのコピーを行おうとしており、
    Value(xlRangeValueXMLSpreadsheet)をテストしていました。
    この方法でコピーを行う際、コピー元のセル範囲に空のセルがある場合の動作に
    問題があり、解決方法を探しています。

    再現方法はEXCELのVBAで記載します。
    (VB.NETからの実行でも同じ現象であるため)
    1 EXCELの新規ブックを作成。
    2 Sheet2のB2セルを黄色で塗りつぶす。
    3 下記のVBAを実行
    Sub test()
    Sheet1.Range("A1:A2").Value(xlRangeValueXMLSpreadsheet) = Sheet2.Range("B1:B2").Value(xlRangeValueXMLSpreadsheet)
    End Sub
    結果、Sheet1のA1セルが黄色になります。
    本来は、Sheet1のA1セルは空、A2セルが黄色になることを想定していました。

    コピー元のSheet2のB1セルが空のため、切りつめられているように思えるのですが、回避策等をお持ちの方がいましたらお知らせください。

      


マルチポストを報告
違反を報告
引用返信 削除キー/
■33819 / inTopicNo.2)  Re[1]: EXCELでクリップボードを使用せずに書式付きでセルをコピー
□投稿者/ kiku 一般人(4回)-(2018/03/06(Tue) 11:06:04)
  • アイコンいろいろ実験してみたのですが、
    範囲の先頭に空白がある場合に、本現象が発生するようです。
    範囲の途中に空白がある場合には、発生しませんでした。

    ●対策案1
     先頭に空白があるかチェックし、
     先頭が空白にならない範囲をコピーする。

    ●対策案2
     rangeを使うと発生するみたいなので
     1セルずつコピーする。

    ●そのほか
     rangeかどこかの設定で、この動作に影響する
     設定値がないか探してみたのですが、
     見つからなかったです。
     探し方がわるいだけで、どこかにあるかもしれません。

違反を報告
引用返信 削除キー/
■33820 / inTopicNo.3)  Re[1]: EXCELでクリップボードを使用せずに書式付きでセルをコピー
□投稿者/ Hongliang 大御所(541回)-(2018/03/06(Tue) 11:34:36)
  • アイコンSheet2.Range("A1:A2").Copy Destination:=Sheet1.Range("B1:B2")
    こんな感じで
違反を報告
引用返信 削除キー/
■33821 / inTopicNo.4)  Re[2]: EXCELでクリップボードを使用せずに書式付きでセルをコピー
□投稿者/ わかきつ 一般人(2回)-(2018/03/06(Tue) 12:08:03)
  • アイコンNo33820に返信(Hongliangさんの記事)
    > Sheet2.Range("A1:A2").Copy Destination:=Sheet1.Range("B1:B2")
    > こんな感じで


    Hongliangさん回答ありがとうございます。

    Copyメソッドの使用についでですが、
    色々なドキュメントを読むとDestinationを指定した時にはクリップボードを使わなさそうに読み取れます。

    ですが、実際に動作させるとクリップボードに影響をあたえているようなのです。

    コピー範囲の大きさによって影響を与えなかったり、クリップボードにデータが残りはしないがクリアされてしまう等、安定しない現象が発生します。





違反を報告
引用返信 削除キー/
■33822 / inTopicNo.5)  Re[2]: EXCELでクリップボードを使用せずに書式付きでセルをコピー
□投稿者/ わかきつ 一般人(3回)-(2018/03/06(Tue) 12:35:29)
  • アイコンNo33819に返信(kikuさんの記事)
    > いろいろ実験してみたのですが、
    > 範囲の先頭に空白がある場合に、本現象が発生するようです。
    > 範囲の途中に空白がある場合には、発生しませんでした。
    >
    > ●対策案1
    >  先頭に空白があるかチェックし、
    >  先頭が空白にならない範囲をコピーする。
    >
    > ●対策案2
    >  rangeを使うと発生するみたいなので
    >  1セルずつコピーする。
    >
    > ●そのほか
    >  rangeかどこかの設定で、この動作に影響する
    >  設定値がないか探してみたのですが、
    >  見つからなかったです。
    >  探し方がわるいだけで、どこかにあるかもしれません。
    >

    kikuさん回答ありがとうございます。

    対策案2をヒントに下記のようにしてみました。
    コピー元範囲の先頭セル(結合していない場合)を自身(コピー元)に上書きしてから範囲をコピーする。

    Sub test()
     If Sheet2.Range("B1:B2").Item(1).MergeCells = False Then
      Sheet2.Range("B1:B2").Item(1).Value(xlRangeValueXMLSpreadsheet) = Sheet2.Range("B1:B2").Item(1).Value(xlRangeValueXMLSpreadsheet)
     End If
     Sheet1.Range("A1:A2").Value(xlRangeValueXMLSpreadsheet) = Sheet2.Range("B1:B2").Value(xlRangeValueXMLSpreadsheet)
    End Sub

    ざっとテストしてみた程度ですが、想定した動きをしています。


    参考情報ですが、xlRangeValueXMLSpreadsheetを使用すると、
    EXCELの計算モードが強制的に自動計算になる副作用があるようです。


違反を報告
引用返信 削除キー/
■33824 / inTopicNo.6)  Re[3]: EXCELでクリップボードを使用せずに書式付きでセルをコピー
□投稿者/ わかきつ 一般人(4回)-(2018/03/07(Wed) 09:04:02)
  • アイコン解決済みを忘れていました。

解決み!
違反を報告
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/


- Child Tree -