2017-03-10 15 views
0

私はVBAで新しく学習しています。私はすべてのシート上で値(前に "Number"として定義)を検索するコードを作成できました。特定のセルに特定の値を持つシートの場合は、シートから範囲をコピーしてから貼り付けます新しいワークシート。私はコピー&ペースト(以下のコードを参照)を使用していないと言っておく価値があります。コードは正常に動作しますが、新しいシートにソースと同じ書式を保持したいと思います。私はいくつかのことを試しましたが、うまくいくものはCopy/Pasteタイプのコーディングを使用しなければならないことを意味します。コードの後半では、ActiveSheetが変更されるので問題になります。他の試みは機能しません。さらに、新しいシートに貼り付ける範囲の修正カラム幅を持たせたいと思います。VBA:ソース書式と列幅を追加する場所は?

問題のコードは次のとおりです。 FYI =変数Numberは、コードの前半で定義されています。また、コードの早い段階で新しいシートを作成します。

私の質問:

  1. 敵下記のコード、「コピー」や「貼り付け」タイプのコーディングを使用することなく、ソースからの書式設定を維持する方法があります。

  2. 以下のコードでは、新しいスタッフが貼り付けられる列の幅をどうにか修正できますか?

コードを書くためのより優れた、よりエレガントな方法があれば、私はそれを感謝します。

For k = 1 To wscount - 1 
    If Worksheets(k).Range("F2").Value = Number Then 
     j = j + 1 
     Worksheets(wscount + 1).Range(Cells(1, 1 + j), Cells(100, 1 + j)).Value = Worksheets(k).Range("F1:F100").Value 
    End If 
Next 
+1

コピー/ペーストを使用する場合は、.PasteSpecial xlValuesAndNumberFormatsとxlPasteColumnWidthsを使用できます。私はこれが同じ行にあることができれば肯定的ではありませんが、各過去のオプションを示すために2行のコードを持つだけの単純さです。 – Cyril

+0

一度に1つのフォーマットを設定する必要があります。ソース形式の背景色やフォント色からコピーするには、値を設定する行を複製し、 '.value'を' .font.color'または '.interior.color'に変更します。私は別の方法を考えることができません。 – Gordon

+0

の場合、 '.width'を使うことができますが、if文(J = 1の場合は列幅を設定する)を入れる価値があるので、各列でこれを1回だけ行う必要があります。複数回設定します。 – Gordon

答えて

1

valueプロパティの場合と同様に、ソースセルのプロパティ値をターゲットセルに割り当てることができます。

Option Explicit 

Public Sub CopyValueAndFormat() 
    For k = 1 To wscount - 1 
     If Worksheets(k).Range("F2").Value = Number Then 
      j = j + 1 
      Worksheets(wscount + 1).Range(Cells(1, 1 + j), Cells(100, 1 + j)).Value = Worksheets(k).Range("F1:F100").Value 

      'call setFormat method 
      setFormat Worksheets(k).Range("F1:F100"), Worksheets(wscount + 1).Range(Cells(1, 1 + j), Cells(100, 1 + j)) 
     End If 
    Next 
End Sub 

Private Sub setFormat(source As Range, target As Range) 
    'set target format equal to source format 
    With target 
     .Value = source.Value 
     .Interior.Color = source.Interior.Color 
     .Font.FontStyle = source.Font.FontStyle 
     'add others property to format 

     'call AutoFit method to set column width 
     .EntireColumn.AutoFit 
    End With 
End Sub 
+0

@justme - 代入演算子を使用すると、貼り付けメソッドと比較してコード実行が高速になります。 –

関連する問題