2017-09-10 3 views
0

7列の表から印刷する行を選択します。私はPrintOutメソッドを使ってそれらを印刷します。マクロから選択した行とともに3つの変数を印刷

選択した行の前に用紙の上部に3つの変数値を追加するエレガントな方法はありますか?

これらの変数の値でいくつかのセルを設定し、次の行でテーブルから選択した行を貼り付けて、新しく作成したテーブルを印刷できます。しかし、それはあまりにも複雑に思えます。

は、ここに私のマクロです:私は予想通り、それは範囲内のセルを出力しますプリントアウトする.Select方法を変更した場合

Sub FindMyNubmer() 
    Dim a As Range, b As Range 
    Dim firstRow As Long 
    Dim lastRow As Long 
    Dim eurStart As Long 
    Dim eurEnd As Long 
    Dim usdStart As Long 
    Dim usdEnd As Long 
    Dim gbpStart As Long 
    Dim gbpEnd As Long 
    Set a = ActiveSheet.Range("A1:A65000") 

    For Each b In a.Rows 
     If ActiveSheet.Range("D" & b.Row) = "EUR" Or ActiveSheet.Range("D" & b.Row) = "EUR-" Then 
      eurStart = eurStart + ActiveSheet.Range("G" & b.Row) 
     End If 
     If ActiveSheet.Range("D" & b.Row) = "USD" Or ActiveSheet.Range("D" & b.Row) = "USD-" Then 
      usdStart = usdStart + ActiveSheet.Range("G" & b.Row) 
     End If 
     If ActiveSheet.Range("D" & b.Row) = "GBP" Or ActiveSheet.Range("D" & b.Row) = "GBP-" Then 
      gbpStart = gbpStart + ActiveSheet.Range("G" & b.Row) 
     End If 
     If b.Value = ActiveSheet.Range("H4").Value Then 
      If firstRow = "0" Then 
       firstRow = b.Row 
      End If 
      lastRow = b.Row 
      If ActiveSheet.Range("D" & b.Row) = "EUR" Or ActiveSheet.Range("D" & b.Row) = "EUR-" Then 
       eurEnd = eurEnd + ActiveSheet.Range("G" & b.Row) 
      End If 
      If ActiveSheet.Range("D" & b.Row) = "USD" Or ActiveSheet.Range("D" & b.Row) = "USD-" Then 
       usdEnd = usdEnd + ActiveSheet.Range("G" & b.Row) 
      End If 
      If ActiveSheet.Range("D" & b.Row) = "GBP" Or ActiveSheet.Range("D" & b.Row) = "GBP-" Then 
       gbpEnd = gbpEnd + ActiveSheet.Range("G" & b.Row) 
      End If 
     End If 
    Next 
    eurEnd = eurStart - eurEnd 
    usdEnd = usdStart - usdEnd 
    gbpEnd = gbpStart - gbpEnd 
    ActiveSheet.Range("A" & firstRow & ":G" & lastRow).Select 
    MsgBox eurStart & " - " & eurEnd 
    MsgBox usdStart & " - " & usdEnd 
    MsgBox gbpStart & " - " & gbpEnd 
End Sub 

印刷前にeur/usd/gbp Start/End変数を一番上に置きたいと思います。

テーブルには7列あるので、テーブルセルの前にこのようなものを印刷したいと思います。

EUR  eurStart var.   eurEnd var. 
USD  ...     ... 
GBP  ...     ... 
+0

私がこれを正しく理解していれば、範囲の印刷が始まる前に開始値と終了値を印刷したいだけです。彼らはすべて同じ列にいなければなりませんか?変数に "ヘッダ"を使用しようとしましたか、おそらく 'With Selection'の' .print'など? – Mitch

+0

いいえ私はこのヘッダーとセレクションがどのように動作するか分かりません –

+0

セルと列のデータをスクリーンショット(または単に入力)できますか?私はプリントヘッダーのスクリプトに取り組んでいますが、テストするシートに情報が必要です。私はA1からG5までのいくつかの乱数を持っていますが、H4には何がありますか? H4の – Mitch

答えて

1

ここにコードの書き換えです。それはあなたの質問に対する答えとして意味されていません。

ロジックエラーがあります。ユーロがマッチした後でも、あなたのコードはUSDとGBPをチェックします。

Sub FindMyNubmer() 

    Dim firstRow As Long, lastRow As Long 

    Dim eurStart As Long, eurEnd As Long 
    Dim usdStart As Long, usdEnd As Long 
    Dim gbpStart As Long, gbpEnd As Long 

    Dim ddd As String 
    Dim ggg As Long 

    Dim b As Range 
    For Each b In ActiveSheet.Range("A1:A65000") 

     ddd = b.Columns("D") 
     ggg = b.Columns("G") 

     Select Case ddd 
      Case "EUR", "EUR-": eurStart = eurStart + ggg 
      Case "USD", "USD-": usdStart = usdStart + ggg 
      Case "GBP", "GBP-": gbpStart = gbpStart + ggg 
     End Select 

     If b.Value = ActiveSheet.Range("H4").Value Then 

      If firstRow = 0 Then firstRow = b.Row 

      lastRow = b.Row 

      Select Case ddd 
       Case "EUR", "EUR-": eurEnd = eurEnd + ggg 
       Case "USD", "USD-": usdEnd = usdEnd + ggg 
       Case "GBP", "GBP-": gbpEnd = gbpEnd + ggg 
      End Select 
     End If 
    Next 

    eurEnd = eurStart - eurEnd 
    usdEnd = usdStart - usdEnd 
    gbpEnd = gbpStart - gbpEnd 

    ActiveSheet.Range("A" & firstRow & ":G" & lastRow).Select 

    MsgBox "eur" & vbTab & eurStart & " - " & eurEnd & vbCrLf _ 
     & "usd" & vbTab & usdStart & " - " & usdEnd & vbCrLf _ 
     & "gbp" & vbTab & gbpStart & " - " & gbpEnd 

End Sub 
+0

良いおかげで、私は性能の問題があったかどうかを知ることができます。ありがとうあなたのコードは良い作品。これらのeur/usd/gbp Start End変数は、選択したセルの前に印刷ページに配置する必要があります。 'Range(firstRange、secondRange).printPreview'を試してみるとうまくいくようです。ポイントはそれ前に私は変数の値をセルに入れてからそれを選択しなければなりませんでした。これは非常に良いアプローチではありません。 –

+0

実際には間違っているだけではなく、eurStart/Endを変更してもパフォーマンスの問題usdまたはgbp。 –

0

これは原則ですが動作します。これをあなたのスクリプトに組み込みます。それに応じて調整してください

With ActiveSheet.PageSetup 
.LeftHeader = _ 
"EUR    " & eurStartvar & "    " & eurEndvar & Chr(10) & "USD    " & usdStartvar & "    " & usdEndvar & Chr(10) & "GBP    " & gbpStartvar & "    " & gbpEdnvar & Chr(10) & Chr(10) 

End With 
関連する問題