« 2020年3月 | トップページ | 2020年5月 »

2020年4月

2020年4月27日 (月)

複数のキーワードを含むセルを検索する


Excelの検索機能では
Googleで検索するときのように
複数のキーワードを空白で区切って入力して
検索することはできません。

VBAで
複数のキーワードをすべて含むセルを
検索できるコードを作っていきます。

以下コードの流れを説明します。

複数のキーワードの文字列はInputBoxを使って取得して
変数kys_strに格納します。

取得した文字列の前後に余分なスペースがある場合の対策として
LTrim関数,RTrim関数で前後のスペースを削除します。

また,スペースが半角か全角か不明のため
すべてを半角に統一します。
そのために全角のスペースのみ
半角のスペースにReplace関数で置換します。

ここまでの処理で文字列の前後のスペースがなく
スペースがあれば半角スペースの文字列に修正されました。

InputBoxに何も入力されなかった場合
kys_str = ""となるので
これで判断してマクロを終了します。

次に,
半角スペースの1文字前を区切りにしたいため
文字列の最後に半角のスペースを追加します。

Do Loop文の中のコードで
取得した文字列を1つのキーワードごとに
1次元配列に格納します。

同時に
キーワードを検索したときに
検索結果を入れる配列flag_aryも
キーワードの数だけ空で作成します。

For Each文の中で
アクティブシートの使用している範囲のセルに対して
各キーワードに一致する部分があるかを
If文で判定していきます。

一致すれば 各キーワードに対応するflag_ary(i) = Trueにして,
一致しなければflag_ary(i) = Falseにします。

flag_ary(i)がすべてTureの場合のみ
flag = Trueにします。
1つでもFlaseがあればflag = Falseになります。

flag = Trueで
すべてのキーワードが含まれるという判断になります。

flag = Trueになるセルを見つけたら
そのセルを選択して,
セル位置をMsgBoxに表示させます。
MsgBoxでセルの色を付けるかOK/キャンセルで決定します。

色付けしたセルはオートフィルタの抽出条件に使えます。

複数のキーワードを含むセルを検索するコード:

Sub Macro20200427a()
'複数キーワードで検索

    Dim kys_str As String
    Dim kys_ary() As String
    Dim i As Integer, j As Integer
    Dim flag_ary() As Boolean
    Dim flag As Boolean
    Dim color_flag As Integer
    Dim c As Range
    Dim f
   
    '文字列取得
    kys_str = InputBox("検索するワードを空白で区切って入力して下さい。")
   
    '文字列の前処理
    '文字列の前後のスペースを削除
    kys_str = LTrim(kys_str)
    kys_str = RTrim(kys_str)
   
    '全角のスペースを半角に修正
    kys_str = Replace(kys_str, " ", " ")
   
    '入力内容がない場合,終了
    If kys_str = "" Then
        MsgBox "入力内容がありません。終了します。"
        Exit Sub
    End If
   
    '文字列の最後にスペースを追加
    kys_str = kys_str & " "
   
    'キーワードを1次元配列kys_aryに格納する
    i = 0
    Do While InStr(kys_str, " ") <> 0
        ReDim Preserve kys_ary(i)
        ReDim Preserve flag_ary(i)
        kys_ary(i) = Left(kys_str, InStr(kys_str, " ") - 1)
        i = i + 1
        kys_str = Mid(kys_str, InStr(kys_str, " ") + 1, Len(kys_str))
        kys_str = LTrim(kys_str)
    Loop
      
    '複数キーワードで検索
    For Each c In ActiveSheet.UsedRange
        '各キーワードが含まれるか確認
        For j = 0 To UBound(kys_ary())
            If InStr(c, kys_ary(j)) = 0 Then
                flag_ary(j) = False
            Else
                flag_ary(j) = True
            End If
        Next j
       
        '各キーワードのフラグを確認
        'すべてTrueならflag=Ture
        '1つでもFalseがあればflag=False
        flag = True
        For Each f In flag_ary()
            If f = False Then
                flag = False
                Exit For
            End If
        Next f
       
        If flag = True Then
            c.Select
           
            color_flag = MsgBox("条件に一致:行" & _
                c.Row & ", 列" & c.Column & Chr(10) & _
                "色付けしますか?", _
                vbOKCancel + vbInformation)
               
            'セルを色付け
            If color_flag = 1 Then
                c.Interior.Color = RGB(200, 255, 255)
            End If
        End If
       
    Next c
   
    MsgBox "検索終了しました。"

End Sub

実行例を示します。

次の画像の状態のシートで実行します。
Vba20200427a

表示されるInputBoxに次の画像のように入力します。
Vba20200427b

すべてのキーワードを含むセルがあると
メッセージボックスが表示されます。
Vba20200427c

[はい]をクリックするとセルに塗りつぶしの色が付けられます。
Vba20200427d

使用Ver:Excel For Office365

続きを読む "複数のキーワードを含むセルを検索する"

| | コメント (0)

2020年4月26日 (日)

印刷範囲の自動設定

シートの印刷範囲を指定していない状態で
印刷プレビューをすると
使用している範囲を自動でExcelが認識してくれます。

これを利用して
印刷範囲を自動設定したいと思います。

使用している範囲を取得するために
UsedRangeプロパティが使えそうですが,
図形を使用している場合に
印刷範囲の設定がうまくいかなくなる可能性があります。

理由として
UsedRangeはセルの内容で使っているかいないかを判断するようで,
図形がUsedRangeの範囲外にある場合に
UsedRangeを印刷範囲に使用すると図形が印刷範囲に入らないからです。

シートの印刷範囲を指定していない状態にするには
PrintAreaプロパティの値を""にします。

次のコードはアクティブシートの使用している範囲を
A4縦向き,1枚の幅にページ設定して印刷プレビューを表示します。

印刷範囲を自動設定するコード:

Sub macro20200426a()
'印刷範囲 自動設定

    Application.PrintCommunication = False

    With ActiveSheet.PageSetup
        '印刷範囲をクリア
        .PrintArea = ""
       
        '余白 cm単位での設定
        .LeftMargin = Application.CentimetersToPoints(0.6)
        .RightMargin = Application.CentimetersToPoints(0.6)
        .TopMargin = Application.CentimetersToPoints(1.9)
        .BottomMargin = Application.CentimetersToPoints(1.9)
        .HeaderMargin = Application.CentimetersToPoints(0.8)
        .FooterMargin = Application.CentimetersToPoints(0.8)
       
        '用紙の向き
        .Orientation = xlPortrait '縦
       
        '用紙サイズ
        .PaperSize = xlPaperA4 'A4
       
        '拡大縮小 シートを幅を1ページに合わせ印刷
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 0
    End With
   
    Application.PrintCommunication = True
    ActiveSheet.PrintPreview
   
End Sub

使用Ver:Excel For Office365

続きを読む "印刷範囲の自動設定"

| | コメント (0)

2020年4月21日 (火)

改ページの追加・削除・位置取得

改ページとは
印刷する時のページの区切りのことです。
水平,垂直の2種類の改ページがあります。
設定された用紙サイズに合わせて自動設定されます。
また,自分で任意の位置に改行を追加することができます。
Vba20200421a

任意の位置で改ページを追加する場合は
手動では
[ページレイアウト]-[改ページ]-[改ページの挿入]をクリックすると
選択しているセルの上側に水平改行が追加されます。

水平改ページをVBAで追加していきます。
次のコードは
シート"Sheet1",10行目の上に
水平改ページを追加します。

水平改ページを追加するコード:

Sub macro20200421a()
'水平改ページを追加する

    Sheets("Sheet1").HPageBreaks.Add Before:=Cells(10, 1)
   
End Sub



次は,垂直改ページをVBAで追加していきます。

次のコードは
シート"Sheet1",5列目の左側に
垂直改ページを追加します。

垂直改ページを追加するコード:

Sub macro20200421b()
'垂直改ページを追加する

    Sheets("Sheet1").VPageBreaks.Add Before:=Cells(1, 5)

End Sub



設定した改ページを削除する方法についてみていきます。

次のコードは
シート"Sheet1"のすべての改ページを削除します。

すべての改ページを削除するコード:

Sub macro20200421c()
'すべての改ページを削除する

    Sheets("Sheet1").ResetAllPageBreaks

End Sub



次のコードは
水平改ページのみ削除します。
まとめて削除することはできないので
HPageBreaks.countで水平改行の総数を取得して
インデックス番号の大きいものから
1つ1つ削除していきます。

このコードを実行する場合に
印刷範囲が設定されていないと
シートに改行が設定されていても認識されずにエラーになります。

水平改ページのみ削除するコード:

Sub macro20200421d()
'改ページ 削除

    Dim sh As Worksheet
    Dim pb_count As Integer
    Dim i As Integer
   
    Set sh = Sheets("Sheet1")
    pb_count = sh.HPageBreaks.count

    For i = pb_count To 1 Step -1
        sh.HPageBreaks(i).Delete
    Next i

End Sub

垂直改ページを削除したい場合は
上記のコードの中で
HPageBreaksの部分をVPageBreaksに変更してください。



設定されている改ページの位置を
取得する方法を見ていきます。

次のコードは水平改ページが設定されている
行番号,列番号をメッセージボックスで表示します。

垂直改ページの設定を取得したい場合は
下記のコードの中で
HPageBreaksの部分をVPageBreaksに変更してください。

改ページの位置を取得するコード:

Sub Macro20200421e()
'改ページ 設定セル取得

    Dim i As Integer
    Dim obj As Object
   
    For Each obj In Sheets("Sheet1").HPageBreaks
        MsgBox obj.Location.Row & "," & obj.Location.Column
    Next obj

 End Sub

使用Ver:Excel For Office365

続きを読む "改ページの追加・削除・位置取得"

| | コメント (0)

2020年4月20日 (月)

セル内容をもとにPasteメソッドで文字列の図形を作成する

図形で文字列を作成する場合に
1つ1つ文字を入力していくのは手間です。

ここでは,セルに入力された内容で
複数の文字列を図形で作成していきます。

手動でペーストする場合に
右クリックメニューで
[形式を選択して貼り付け]-[図]の手順で作成される図は
セルの大きさや文字の設定など反映した文字列の図形になります。

Vba20200420a

この方法で作成された図は
セルの元データを変更しても
作成された図は変更されません。

 

Vba20200420b

上の画像のように入力されているシートで
A列の1行から5行までのセル内容の図形を
B列に作成していくコードを作成します。

セル内容をもとに文字列の図形を作成するコード1:

Sub macro20200420a()
'セル内容をもとに文字列の図形を作成する

    Dim i As Integer
   
    For i = 1 To Cells(1, 1).End(xlDown).Row
        Cells(i, 1).Copy
        Cells(i, 2).Select
        ActiveSheet.Pictures.Paste.Select
    Next i
   
End Sub

実行結果:
Vba20200420c

B列に図形が作成されました。
元のセルの大きさや文字内容を変更しても
図形は変更されません。

次に,
データ元のセルの大きさや文字内容を変更すると
図形にも反映されるペーストで図形を作成してきます。

手動では,
右クリックメニューで
[形式を選択して貼り付け]-[リンクされた図]の手順で作成できます。

Vba20200420d

 

セル内容をもとに文字列の図形を作成するコード2:

Sub macro20200420b()
'セル内容をもとにリックされた文字列の図形を作成する

    Dim i As Integer
   
    For i = 1 To Cells(1, 1).End(xlDown).Row
        Cells(i, 1).Copy
        Cells(i, 2).Select
        ActiveSheet.Pictures.Paste(Link:=True).Select
    Next i
   
End Sub

実行結果:
Vba20200420e

B列に図形が作成されました。

この図形は元のセルを変更すると
図形にも変更が反映されます。
試しにA5セルを変更すると
次の画像のように図形も変更されます。

Vba20200420f

 

使用Ver:Excel For Office365

続きを読む "セル内容をもとにPasteメソッドで文字列の図形を作成する"

| | コメント (0)

2020年4月19日 (日)

図形のビジュアル一覧を作成する

シェイプを追加するには
AddShape メソッドを使用します。
次のコードは位置が左から10pt,上から10pt
幅100pt,高さ100ptの四角形を追加します。

 

Sub macro20200419a()
'四角形を追加

    ActiveSheet.Shapes.AddShape( _
        msoShapeRectangle, _
        10, 10, 100, 100).Select
   
End Sub

上のコードでmsoShapeRectangleの部分は
184種のオートシェイプのタイプが指定できます。

詳細は次のMicrosoftのWebページを参照ください。
MsoAutoShapeType 列挙 (Office)
うまく翻訳されていないので英文ページのリンクも貼ります。
MsoAutoShapeType enumeration (Office)

184種のオートシェイプをすべて作成してみます。

下のコードでは,
配列stにオートシェイプのタイプを格納しています。
その際にArray関数を使いますが,
行継続文字「 _」の使用は24回までで制限されているので
複数に分けて配列stに値を格納します。

msoShapeFlowchartSequentialAcessStorageは
「定数が定義されていません」という
エラーになるので除いてあります。

また,タイプ135,140はエラーになり作成されません。
エラーが起きてもコードの実行が中断されないように
On Error Resume Nextで
エラーを無視するようにしてあります。

どのタイプが分かりやすいように表示している文字は
四角形のシェイプで別途作成しています。

図形のビジュアル一覧を作成するコード:

Sub macro20200419b()
'図形のビジュアル一覧を作成する

    Dim i As Integer
    Dim ary()
    Dim st()
   
    Sheets.Add 'シート追加
   
    'オートシェイプのタイプを格納する配列stを作成
    ary = Array(msoShape10pointStar, msoShape12pointStar, _
        msoShape16pointStar, msoShape24pointStar, _
        msoShape32pointStar, msoShape4pointStar, _
        msoShape5pointStar, msoShape6pointStar, _
        msoShape7pointStar, msoShape8pointStar, _
        msoShapeActionButtonBackorPrevious, _
        msoShapeActionButtonBeginning, _
        msoShapeActionButtonCustom, _
        msoShapeActionButtonDocument, _
        msoShapeActionButtonEnd, _
        msoShapeActionButtonForwardorNext, _
        msoShapeActionButtonHelp, msoShapeActionButtonHome, _
        msoShapeActionButtonInformation, _
        msoShapeActionButtonMovie, _
        msoShapeActionButtonReturn, _
        msoShapeActionButtonSound, _
        msoShapeArc, msoShapeBalloon, _
        msoShapeBentArrow, msoShapeBentUpArrow, _
        msoShapeBevel, msoShapeBlockArc, _
        msoShapeCan, msoShapeChartPlus)
       
    st = ary
   
    ary = Array(msoShapeChartStar, msoShapeChartX, _
        msoShapeChevron, msoShapeChord, _
        msoShapeCircularArrow, msoShapeCloud, _
        msoShapeCloudCallout, msoShapeCorner, _
        msoShapeCornerTabs, msoShapeCross, _
        msoShapeCube, msoShapeCurvedDownArrow, _
        msoShapeCurvedDownRibbon, msoShapeCurvedLeftArrow, _
        msoShapeCurvedRightArrow, msoShapeCurvedUpArrow, _
        msoShapeCurvedUpRibbon, msoShapeDecagon, _
        msoShapeDiagonalStripe, msoShapeDiamond, _
        msoShapeDodecagon, msoShapeDonut, _
        msoShapeDoubleBrace, msoShapeDoubleBracket, _
        msoShapeDoubleWave, msoShapeDownArrow, _
        msoShapeDownArrowCallout, msoShapeDownRibbon, _
        msoShapeExplosion1, msoShapeExplosion2, _
        msoShapeFlowchartAlternateProcess, msoShapeFlowchartCard, _
        msoShapeFlowchartCollate, msoShapeFlowchartConnector, _
        msoShapeFlowchartData, msoShapeFlowchartDecision, _
        msoShapeFlowchartDelay, msoShapeFlowchartDirectAccessStorage, _
        msoShapeFlowchartDisplay, msoShapeFlowchartDocument)
       
    For i = 1 To UBound(ary)
        ReDim Preserve st(UBound(st) + 1)
        st(UBound(st)) = ary(i)
    Next i

    ary = Array(msoShapeFlowchartExtract, _
        msoShapeFlowchartInternalStorage, _
        msoShapeFlowchartMagneticDisk, msoShapeFlowchartManualInput, _
        msoShapeFlowchartManualOperation, msoShapeFlowchartMerge, _
        msoShapeFlowchartMultidocument, _
        msoShapeFlowchartOfflineStorage, _
        msoShapeFlowchartOffpageConnector, msoShapeFlowchartOr, _
        msoShapeFlowchartPredefinedProcess, _
        msoShapeFlowchartPreparation, _
        msoShapeFlowchartProcess, msoShapeFlowchartPunchedTape, _
        msoShapeFlowchartSort, _
        msoShapeFlowchartStoredData, _
        msoShapeFlowchartSummingJunction, _
        msoShapeFlowchartTerminator, msoShapeFoldedCorner, _
        msoShapeFrame, msoShapeFunnel, _
        msoShapeGear6, msoShapeGear9, _
        msoShapeHalfFrame, msoShapeHeart, _
        msoShapeHeptagon, msoShapeHexagon, _
        msoShapeHorizontalScroll, msoShapeIsoscelesTriangle)
'        msoShapeFlowchartSequentialAcessStorage, _

    For i = 1 To UBound(ary)
        ReDim Preserve st(UBound(st) + 1)
        st(UBound(st)) = ary(i)
    Next i

    ary = Array(msoShapeLeftArrow, msoShapeLeftArrowCallout, _
        msoShapeLeftBrace, msoShapeLeftBracket, _
        msoShapeLeftCircularArrow, msoShapeLeftRightArrow, _
        msoShapeLeftRightArrowCallout, _
        msoShapeLeftRightCircularArrow, _
        msoShapeLeftRightRibbon, msoShapeLeftRightUpArrow, _
        msoShapeLeftUpArrow, msoShapeLightningBolt, _
        msoShapeLineCallout1, msoShapeLineCallout1AccentBar, _
        msoShapeLineCallout1BorderandAccentBar, _
        msoShapeLineCallout1NoBorder, _
        msoShapeLineCallout2, msoShapeLineCallout2AccentBar, _
        msoShapeLineCallout2BorderandAccentBar, _
        msoShapeLineCallout2NoBorder, _
        msoShapeLineCallout3, msoShapeLineCallout3AccentBar, _
        msoShapeLineCallout3BorderandAccentBar, _
        msoShapeLineCallout3NoBorder, _
        msoShapeLineCallout4, msoShapeLineCallout4AccentBar, _
        msoShapeLineCallout4BorderandAccentBar, _
        msoShapeLineCallout4NoBorder, _
        msoShapeLineInverse, msoShapeMathDivide)

    For i = 1 To UBound(ary)
        ReDim Preserve st(UBound(st) + 1)
        st(UBound(st)) = ary(i)
    Next i
   
    ary = Array(msoShapeMathEqual, msoShapeMathMinus, _
        msoShapeMathMultiply, msoShapeMathNotEqual, _
        msoShapeMathPlus, msoShapeMixed, _
        msoShapeMoon, msoShapeNonIsoscelesTrapezoid, _
        msoShapeNoSymbol, msoShapeNotchedRightArrow, _
        msoShapeNotPrimitive, msoShapeOctagon, _
        msoShapeOval, msoShapeOvalCallout, _
        msoShapeParallelogram, msoShapePentagon, _
        msoShapePie, msoShapePieWedge, _
        msoShapePlaque, msoShapePlaqueTabs, _
        msoShapeQuadArrow, msoShapeQuadArrowCallout, _
        msoShapeRectangle, msoShapeRectangularCallout, _
        msoShapeRegularPentagon, msoShapeRightArrow, _
        msoShapeRightArrowCallout, msoShapeRightBrace, _
        msoShapeRightBracket, msoShapeRightTriangle, _
        msoShapeRound1Rectangle, msoShapeRound2DiagRectangle, _
        msoShapeRound2SameRectangle, msoShapeRoundedRectangle, _
        msoShapeRoundedRectangularCallout, msoShapeSmileyFace, _
        msoShapeSnip1Rectangle, msoShapeSnip2DiagRectangle, _
        msoShapeSnip2SameRectangle, msoShapeSnipRoundRectangle)

    For i = 1 To UBound(ary)
        ReDim Preserve st(UBound(st) + 1)
        st(UBound(st)) = ary(i)
    Next i

    ary = Array(msoShapeSquareTabs, msoShapeStripedRightArrow, _
        msoShapeSun, msoShapeSwooshArrow, _
        msoShapeTear, msoShapeTrapezoid, _
        msoShapeUpArrow, msoShapeUpArrowCallout, _
        msoShapeUpDownArrow, msoShapeUpDownArrowCallout, _
        msoShapeUpRibbon, msoShapeUTurnArrow, _
        msoShapeVerticalScroll, msoShapeWave)
       
    For i = 1 To UBound(ary)
        ReDim Preserve st(UBound(st) + 1)
        st(UBound(st)) = ary(i)
    Next i
    'オートシェイプのタイプを格納する配列stを作成 終了
   
    'シェイプを作成
    For i = 1 To UBound(st)
        '各種シェイプ作成
        On Error Resume Next
        ActiveSheet.Shapes.AddShape( _
            st(i), 30 + (i Mod 10) * 100, _
            10 + Int(i / 10) * 100, _
            70, 50).Select
        On Error GoTo 0
       
        '文字表示用四角形の作成
        ActiveSheet.Shapes.AddShape( _
            msoShapeRectangle, 30 + (i Mod 10) * 100, _
            10 + Int(i / 10) * 100, _
            70, 50).Select
        Selection.Text = i & Chr(10) & "type: " & st(i)
        With Selection.ShapeRange
            .Fill.Visible = msoFalse
            .Line.Visible = msoFalse
            .TextFrame2.VerticalAnchor = msoAnchorMiddle
        End With
        With Selection.ShapeRange.TextFrame2.TextRange.Font.Fill
            .Visible = msoTrue
            .ForeColor.RGB = RGB(0, 0, 0)
            .Transparency = 0
            .Solid
        End With

    Next i
   
End Sub

実行結果(一部):

Vba20200419a

使用Ver:Excel For Office365

 

続きを読む "図形のビジュアル一覧を作成する"

| | コメント (0)

2020年4月17日 (金)

ページ設定をコピーする

あるシートのページ設定を
他のシートにも設定したいときの方法について見ていきます。

セルの書式設定のように
コピーやペーストのメソッドは見つからなかったので,
コピー元のページ設定に関するプロパティの値を
コピー先のプロパティに指定することで
ページ設定をコピーしていきます。

下のコードを実行する前に,
シート名「ページ設定」にページ設定をしておきます。

「ページ設定」シートのページ設定を
アクティブシートにコピーします。

ヘッダー・フッターに使用する画像の
Filenameプロパティはxlsx形式では
画像データを指定してブックを閉じるまでは保持されます。

一旦閉じたブックを開くと
保存場所や拡張子は保持されていないので
変数img_pathに画像の保存場所,
変数img_exで拡張子を指定しておきます。

次のコードはヘッダー・フッターに画像を設定したら
一旦ブックを保存して閉じて,再度開いてから実行して下さい。

ページ設定をコピーするコード:

Sub macro20200417a()
'ページ設定のコピー

    Dim sh_name As String
    Dim sh_ps As Object
    Dim img_path As String
    Dim img_ex As String
   
    img_path = "C:\Users\Username\img"
    img_ex = ".png"

    sh_name = "ページ設定"
    img_path = img_path & "\"
    Set sh_ps = Sheets(sh_name).PageSetup
   
    With ActiveSheet.PageSetup
        .PrintTitleRows = sh_ps.PrintTitleRows
        .PrintTitleColumns = sh_ps.PrintTitleColumns
    End With
    Application.PrintCommunication = True
   
    ActiveSheet.PageSetup.PrintArea = ""

    With ActiveSheet.PageSetup
        .LeftHeader = sh_ps.LeftHeader
        .CenterHeader = sh_ps.CenterHeader
        .RightHeader = sh_ps.RightHeader
        .LeftFooter = sh_ps.LeftFooter
        .CenterFooter = sh_ps.CenterFooter
        .RightFooter = sh_ps.RightFooter
        .LeftMargin = sh_ps.LeftMargin
        .RightMargin = sh_ps.RightMargin
        .TopMargin = sh_ps.TopMargin
        .BottomMargin = sh_ps.BottomMargin
        .HeaderMargin = sh_ps.HeaderMargin
        .FooterMargin = sh_ps.FooterMargin
        .PrintHeadings = sh_ps.PrintHeadings
        .PrintGridlines = sh_ps.PrintGridlines
        .PrintComments = sh_ps.PrintComments
        .CenterHorizontally = sh_ps.CenterHorizontally
        .CenterVertically = sh_ps.CenterVertically
        .Orientation = sh_ps.Orientation
        .Draft = sh_ps.Draft
        .PaperSize = sh_ps.PaperSize
        .FirstPageNumber = sh_ps.FirstPageNumber
        .order = sh_ps.order
        .BlackAndWhite = sh_ps.BlackAndWhite
        .Zoom = sh_ps.Zoom
        .PrintErrors = sh_ps.PrintErrors
        .OddAndEvenPagesHeaderFooter = sh_ps.OddAndEvenPagesHeaderFooter
        .DifferentFirstPageHeaderFooter = sh_ps.DifferentFirstPageHeaderFooter
        .ScaleWithDocHeaderFooter = sh_ps.ScaleWithDocHeaderFooter
        .AlignMarginsHeaderFooter = sh_ps.AlignMarginsHeaderFooter
        .EvenPage.LeftHeader.Text = sh_ps.EvenPage.LeftHeader.Text
        .EvenPage.CenterHeader.Text = sh_ps.EvenPage.CenterHeader.Text
        .EvenPage.RightHeader.Text = sh_ps.EvenPage.RightHeader.Text
        .EvenPage.LeftFooter.Text = sh_ps.EvenPage.LeftFooter.Text
        .EvenPage.CenterFooter.Text = sh_ps.EvenPage.CenterFooter.Text
        .EvenPage.RightFooter.Text = sh_ps.EvenPage.RightFooter.Text
        .FirstPage.LeftHeader.Text = sh_ps.FirstPage.LeftHeader.Text
        .FirstPage.CenterHeader.Text = sh_ps.FirstPage.CenterHeader.Text
        .FirstPage.RightHeader.Text = sh_ps.FirstPage.RightHeader.Text
        .FirstPage.LeftFooter.Text = sh_ps.FirstPage.LeftFooter.Text
        .FirstPage.CenterFooter.Text = sh_ps.FirstPage.CenterFooter.Text
        .FirstPage.RightFooter.Text = sh_ps.FirstPage.RightFooter.Text
    End With
   
    '通常・奇数ページのヘッダー画像の設定
    Set sh_ps = Sheets(sh_name).PageSetup.LeftHeaderPicture
    With ActiveSheet.PageSetup.LeftHeaderPicture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.CenterHeaderPicture
    With ActiveSheet.PageSetup.CenterHeaderPicture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.RightHeaderPicture
    With ActiveSheet.PageSetup.RightHeaderPicture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
   
    Set sh_ps = Sheets(sh_name).PageSetup.LeftFooterPicture
    With ActiveSheet.PageSetup.LeftFooterPicture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.CenterFooterPicture
    With ActiveSheet.PageSetup.CenterFooterPicture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.RightFooterPicture
    With ActiveSheet.PageSetup.RightFooterPicture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
   
    '先頭ページのヘッダー画像の設定
    Set sh_ps = Sheets(sh_name).PageSetup.FirstPage.LeftHeader.Picture
    With ActiveSheet.PageSetup.FirstPage.LeftHeader.Picture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.FirstPage.CenterHeader.Picture
    With ActiveSheet.PageSetup.FirstPage.CenterHeader.Picture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.FirstPage.RightHeader.Picture
    With ActiveSheet.PageSetup.FirstPage.RightHeader.Picture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.FirstPage.LeftFooter.Picture
    With ActiveSheet.PageSetup.FirstPage.LeftFooter.Picture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.FirstPage.CenterFooter.Picture
    With ActiveSheet.PageSetup.FirstPage.CenterFooter.Picture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.FirstPage.RightFooter.Picture
    With ActiveSheet.PageSetup.FirstPage.RightFooter.Picture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
   
    '偶数ページのヘッダー画像の設定
    Set sh_ps = Sheets(sh_name).PageSetup.EvenPage.LeftHeader.Picture
    With ActiveSheet.PageSetup.EvenPage.LeftHeader.Picture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.EvenPage.CenterHeader.Picture
    With ActiveSheet.PageSetup.EvenPage.CenterHeader.Picture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.EvenPage.RightHeader.Picture
    With ActiveSheet.PageSetup.EvenPage.RightHeader.Picture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.EvenPage.LeftFooter.Picture
    With ActiveSheet.PageSetup.EvenPage.LeftFooter.Picture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.EvenPage.CenterFooter.Picture
    With ActiveSheet.PageSetup.EvenPage.CenterFooter.Picture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
    Set sh_ps = Sheets(sh_name).PageSetup.EvenPage.RightFooter.Picture
    With ActiveSheet.PageSetup.EvenPage.RightFooter.Picture
        .Filename = img_path & sh_ps.Filename & img_ex
        If .Filename <> "" Then
            .LockAspectRatio = sh_ps.LockAspectRatio
            .Height = sh_ps.Height
            .Width = sh_ps.Width
            .Brightness = sh_ps.Brightness
            .Contrast = sh_ps.Contrast
            .ColorType = sh_ps.ColorType
            .CropBottom = sh_ps.CropBottom
            .CropLeft = sh_ps.CropLeft
            .CropRight = sh_ps.CropRight
            .CropTop = sh_ps.CropTop
        End If
    End With
   
End Sub

設定内容の詳細については、
以下の記事を参照してください。
記事「ヘッダー・フッターの設定
記事「ヘッダー・フッターのフォント設定
記事「ヘッダー・フッターに画像を表示させる
記事「先頭ページ,奇数・偶数ページのヘッダー・フッターの設定

使用Ver:Excel For Office365

続きを読む "ページ設定をコピーする"

| | コメント (0)

2020年4月16日 (木)

先頭ページ,奇数・偶数ページのヘッダー・フッターの設定

ヘッダー・フッターは先頭ページのみ異なる内容に設定できます。
さらに,奇数・偶数ページで異なる内容にも設定できます。

手動で設定する場合,
[奇数/偶数ページを別指定]と
[先頭ページのみ別指定]にチェックを入れて
[ヘッダーの編集]か[フッターの編集]をクリックします。

Vba20200415a

先頭ページ,奇数ページ,偶数ページと
タブが分かれて表示されるようになるので
それぞれのタブで異なる内容を設定できます。

Vba20200415b



VBAでの設定の方法を見ていきます。

先頭ページのヘッダー・フッターは
DifferentFirstPageHeaderFooterプロパティを
Trueにすると有効になります。

次のコードでは
文字列の設定と画像の設定を
別のWithステートメントでまとめています。
画像の設定はヘッダー左側のみです。

設定内容の詳細については、
以下の記事を参照してください。
記事「ヘッダー・フッターの設定
記事「ヘッダー・フッターのフォント設定
記事「ヘッダー・フッターに画像を表示させる

先頭ページのヘッダー・フッターを設定するコード:

Sub macro20200415a()
 '先頭ページのヘッダー・フッターの設定

    ActiveSheet.PageSetup.DifferentFirstPageHeaderFooter = True
   
    '先頭ページ-文字列設定
    With ActiveSheet.PageSetup.FirstPage
        .LeftHeader.Text = "先頭ページ" & Chr(10) & "ヘッダー左&G"
        .CenterHeader.Text = "先頭ページ" & Chr(10) & "ヘッダー中央"
        .RightHeader.Text = "先頭ページ" & Chr(10) & "ヘッダー右"
        .LeftFooter.Text = "先頭ページ" & Chr(10) & "フッター左"
        .CenterFooter.Text = "先頭ページ" & Chr(10) & "フッター中央"
        .RightFooter.Text = "先頭ページ" & Chr(10) & "フッター右"
    End With
   
    '先頭ページ-画像設定
    With ActiveSheet.PageSetup.FirstPage.LeftHeader.Picture
        .Filename = "C:\Users\Username\img.png"
    End With

 End Sub

ヘッダー左側以外に
画像を設定したい場合は
LeftHeaderを下表のどれかに置換してください。

LeftHeader
ヘッダー左
CenterHeader
ヘッダー中央
RightHeader
ヘッダー右
LeftFooter
フッター左
CenterFooter
フッター中央
RightFooter
フッター右



奇数・偶数ページ別のヘッダー・フッターは
OddAndEvenPagesHeaderFooterプロパティをTrueにすると
有効になります。

次のコードでは
奇数ページと偶数ページでそれぞれ
文字列の設定と画像の設定を
別のWithステートメントでまとめています。

画像の設定はヘッダー左側のみなので
他の部分に画像を設定したい場合は
先ほどと同じようにLeftHeaderを置換してください。

奇数・偶数ページのヘッダー・フッターの設定するコード:

Sub macro20200415b()
 '奇数・偶数ページのヘッダー・フッターの設定

    ActiveSheet.PageSetup.OddAndEvenPagesHeaderFooter = True
   
    '奇数ページ-文字列設定
    With ActiveSheet.PageSetup
        .LeftHeader = "奇数ヘッダー左&G"
        .CenterHeader = "奇数ヘッダー中央"
        .RightHeader = "奇数ヘッダー右側"
        .LeftFooter = "奇数フッター左"
        .CenterFooter = "奇数フッター中央"
        .RightFooter = "奇数フッター右"
    End With
   
    '奇数ページ-画像設定(ヘッダー左側のみ)
    With ActiveSheet.PageSetup.LeftHeaderPicture
        .Filename = "C:\Users\Username\img.png"
    End With
   
    '偶数ページ-文字列設定
    With ActiveSheet.PageSetup.EvenPage
        .LeftHeader.Text = "偶数ヘッダー左側&G"
        .CenterHeader.Text = "偶数ヘッダー中央"
        .RightHeader.Text = "偶数ヘッダー右"
        .LeftFooter.Text = "偶数フッター左"
        .CenterFooter.Text = "偶数フッター中央"
        .RightFooter.Text = "偶数フッター右"
    End With
   
    '偶数ページ-画像設定(ヘッダー左側のみ)
    With ActiveSheet.PageSetup.EvenPage.LeftHeader.Picture
        .Filename = "C:\Users\Usename\img.png"
    End With

 End Sub

使用Ver:Excel For Office365

続きを読む "先頭ページ,奇数・偶数ページのヘッダー・フッターの設定"

| | コメント (0)

2020年4月13日 (月)

複数ページにまたがる表を印刷する時に,表タイトルを各ページに表示させる

表が大きくて1ページに収まらないとき
2ページ目以降に
表のタイトル行・列が表示されずに見にくくなってしまいます。

そのような場合に
表のタイトル行・列を各ページに印刷できる設定があります。

手動で設定する場合は
[ページレイアウト]タブ-[印刷タイトル]をクリックすると
下の画像のウィンドウが表示されます。

Vba20200413a

[印刷タイトル]項目の
[タイトル行]か[タイトル列]の矢印をクリックして
セルの範囲を指定します。

表が1ページの幅に入る場合は
タイトル行のみ指定すればOKです。

表が縦横の複数ページにわたる場合は
タイトル行、タイトル列の両方の範囲を指定します。

VBAで
タイトル行、タイトル列を指定する方法を見ていきます。

PrintTitleRowsプロパティに行の範囲を指定し、
PrintTitleColumnsプロパティに列の範囲を指定します。
複数の行、複数の列も指定できます。

次のコードはタイトル行に5行目、
タイトル列にA列を指定します。
実行すると2ページ目以降にも
5行目、A列が表示されるようになります。

表タイトルを各ページに表示するコード1:

Sub macro20200413a()
'タイトル行・タイトル列を設定する

    With ActiveSheet.PageSetup
        .PrintTitleRows = "$5:$5"
        .PrintTitleColumns = "$A:$A"
    End With

End Sub



行・列の範囲指定に
Rangeプロパティを使用できます。

次のコードは
4-5行目をタイトル行に、A-B列をタイトル列に指定します。
Rangeプロパティで指定している範囲は
タイトル行にA1:A2、タイトル列にA4:A5ですが、
A1:A2が含まれる行全体、A4:A5が含まれる列全体の範囲に
自動で変換されます。

表タイトルを各ページに表示するコード2:

Sub macro20200413b()
'タイトル行・タイトル列を設定する

    With ActiveSheet.PageSetup
        .PrintTitleRows = Range(Cells(4, 1), Cells(5, 1)).Address
        .PrintTitleColumns = Range(Cells(1, 1), Cells(1, 2)).Address
    End With

End Sub

使用Ver:Excel For Office365

続きを読む "複数ページにまたがる表を印刷する時に,表タイトルを各ページに表示させる"

| | コメント (0)

2020年4月 6日 (月)

ヘッダー・フッターに画像を表示させる

ヘッダー・フッターに
社外秘マークやロゴマークなど
画像を使用したい場合があります。

手動で画像を設定するには次のようにします。
[ファイル]-[印刷]-[ページ設定]-[ヘッダー/フッター]タブをクリックすると
下の画像のウィンドウが表示されます。

Vba20200406a

次に、[ヘッダーの編集]や[フッターの編集]をクリックすると
下の画像のようなウィンドウが開きますので
画像を表示したい左側・中央部・右側の中の1つをクリックしてから
[図の挿入]をクリックします。

Vba20200406b

画像ファイルを選択して[挿入]をクリックすると
画像が設定されます。

図の書式設定で
画像の大きさ、輝度、コントラスト、トリミングの設定もできます。

Vba20200406b

 

VBAでの方法について見ていきます。

ここではヘッダーの右側に
次の画像を表示させるようにします。

Vba20200406d

Filenameプロパティに画像保存先を指定をして,
RightHeaderプロパティの値を"&G"にします。

ヘッダー・フッターに画像を表示するコード1:

Sub macro20200406a()
    'ヘッダー・フッター
    '画像を使用

    With ActiveSheet.PageSetup.RightHeaderPicture
        .Filename = "C:\Users\Username\Documents\headerimg.png"
    End With
    ActiveSheet.PageSetup.RightHeader = "&G"

End Sub

実行結果:

Vba20200406e

ヘッダー右側以外の部分に画像を使用したい場合は
上のコードの「RightHeader」部分を
次のどれか1つに置き換えてください。

LeftHeader
ヘッダー左
CenterHeader
ヘッダー中央
RightHeader
ヘッダー右
LeftFooter
フッター左
CenterFooter
フッター中央
RightFooter
フッター右



図の書式設定の指定方法を見ていきます。
以降のコードは
macro20200406aでのWithステートメント内に追加して
使用してください。

画像の大きさの指定をしていきます。
次のコードを追加すると
画像の縦横比固定で、高さをセンチ単位で指定できます。
幅は高さを基準に自動で変更されます。

.LockAspectRatio = True
.Height = Application.CentimetersToPoints(1)

高さ・幅(センチ単位)を個別で指定したい場合は
次のコードを追加してください。

.LockAspectRatio = False
.Height = Application.CentimetersToPoints(1)
.Width = Application.CentimetersToPoints(1.5)



次のコードは画像の色の設定をします。

.ColorType = msoPictureGrayscale 'カラータイプ
.Brightness = 0.5 '輝度
.Contrast = 0.8 'コントラスト


ColorTypeプロパティには以下を指定できます。

msoPictureAutomatic
デフォルト
(輝度0.5、コントラスト0.5固定値)
msoPictureWatermark
ウォーターマーク変換
(輝度0.85、コントラスト0.15固定値)
msoPictureBlackAndWhite
モノクロ変換
(輝度、コントラストは指定可能)
msoPictureGrayscale
グレースケール変換
(輝度、コントラストは指定可能)
msoPictureMixed
混合変換
(輝度、コントラストは指定可能)

ColorTypeプロパティに
msoPictureAutomatic、msoPictureWatermarkを指定すると
輝度・コントラストを上に示した固定値を指定するのと同等です。
なのでColorTypeプロパティを単独で使い、
輝度・コントラストは指定しません。
輝度・コントラストを指定すると
ColorTypeはmsoPictureMixedに変換されます。

その他のColorTypeは
輝度・コントラストを別途指定できます。

Brightnessプロパティ(輝度)は
0.0(暗い)~1.0(明るい)までの数値で指定します。

Contrastプロパティ(コントラスト)は
0.0(低コントラスト)~1.0(高コントラスト)までの数値で指定します。

次に色を設定した場合の見た目の一例を提示します。

Vba20200406f

 

Vba20200406g

Vba20200406h

Vba20200406i

上下左右のトリミング幅(センチ単位)を指定するには
次のコードを追加してください。

'トリミング
.CropTop = Application.CentimetersToPoints(0.1) '上
.CropBottom = Application.CentimetersToPoints(0.1) '下
.CropLeft = Application.CentimetersToPoints(0.1) '左
.CropRight = Application.CentimetersToPoints(0.1) '右

使用Ver:Excel For Office365

続きを読む "ヘッダー・フッターに画像を表示させる"

| | コメント (0)

2020年4月 5日 (日)

ヘッダー・フッターにセルの値を使用する

手動では
ヘッダー・フッターにセルの値を指定することはできません。

VBAで
セルの値を使用する方法を見ていきます。

次のコードは
アクティブシートのセル(1,1)の値を
ヘッダー右側に指定します。

ヘッダー・フッターにセルの値を使用するコード1:

Sub Macro20200405a()
'ヘッダー・フッター
'ActiveSheetのセルの値を使用
   
    With ActiveSheet.PageSetup
        .RightHeader = ActiveSheet.Cells(1, 1)
    End With
   
End Sub

特定のシートのセル値を使用するには
上記のコードのActiveSheetの部分を
次のコードのように変更します。
"Sheet1"の部分に任意のシート名を指定します。

ヘッダー・フッターにセルの値を使用するコード2:

Sub Macro20200405b()
'ヘッダー・フッター
'特定シートのセルの値を使用

    With ActiveSheet.PageSetup
        .RightHeader = Sheets("Sheet1").Cells(1, 1)
    End With
   
End Sub

この記事で紹介したコードで
ヘッダー・フッターに設定した値は
セルの値を基にした文字列です。
セルの値を変更しても
ヘッダー・フッターの内容は変わりません。

そこで、印刷時に
最新のセルの値を使用するために
印刷直前に上記のマクロを実行するようにします。

印刷直前にマクロを実行するには
Workbook_BeforePrintイベントプロシージャを使用します。

Visual Basic Editor(VBE)を起動して
プロジェクトエクスプローラーで
Workbookオブジェクトをダブルクリックします。
Vba20200405a

その後、
左側のプルダウンメニューでWorkbookを選択します。
Vba20200405b

右側のプルダウンメニューでBeforePrintを選択します。
Vba20200405c

下の画像のような状態になりますので
Workbook_BeforePrintイベントプロシージャ内に
印刷前に実行したいマクロ名を
Callメソッドで呼び出します。
ヘッダー設定後、メッセージボックスを表示して知らせます。

Vba20200405d

印刷前にマクロを実行するコード:

Private Sub Workbook_BeforePrint(Cancel As Boolean)

    Call Macro20200405b
    MsgBox "ヘッダーを設定しました。"
   
End Sub

これで印刷する直前に
ヘッダーを設定するようにできました。
試しに印刷を実行してみます。

[印刷]ボタンを押した後に
下の画像のメッセージボックスが表示されるので
ヘッダーが設定されたのがわかります。
Vba20200405e

使用Ver:Excel For Office365

続きを読む "ヘッダー・フッターにセルの値を使用する"

| | コメント (0)

2020年4月 2日 (木)

ヘッダー・フッターのフォント設定

手動でヘッダー・フッターのフォント設定をするには
次のような手順で行います。
[印刷]-[ページ設定]-[ヘッダー/フッター]タブで
次のウィンドウが開きます。
Vba20200402a

上の画像の
[ヘッダーの編集]か[フッターの編集]をクリックすると
次のウィンドウが開きます。
Vba20200402b

フォントなどを設定したい文字を選択して
文字書式ボタンを押します。
次のウィンドウを開くので、ここでフォント設定します。
  Vba20200402c

文字ごとに
異なるフォントを設定することもできます。

セルのフォント設定と異なり
ヘッダー・フッターにはフォント設定用のプロパティがないので
ヘッダー・フッターに表示させたい値を指定する文字列の中に
フォント設定を盛り込みます。

具体的に見ていきます。
下記は「ヘッダー左」という文字列のフォントを
HGPゴシックE、太字、文字大きさ14、下線、
色を水色に設定する場合の値です。

"&""HGPゴシックE,太字""&14&U&K08+039ヘッダー左側"

表示例:
Vba20200402d

設定方法が分かりにくく、
0からコードを書くには手間がかかりそうなので
ヘッダー・フッターの文字の設定は
マクロの記録で作成していきます。

マクロの記録は
[表示]タブ-[マクロ]-[マクロの記録]をクリックすると
次のウィンドウが開きます
マクロ名を覚えておいてください。
[OK]で記録が開始されます。
Vba20200402e

マクロの記録をしている状態で
この記事で見てきたように手動でフォントの設定をします。
[OK]ボタンでページ設定を終了します。

この時点でマクロの記録を終了します。

マクロの記録を終了するには
[表示]タブ-[マクロ]-[記録の終了]をクリックします。

記録されたマクロを見るには
[表示]タブ-[マクロ]-[マクロの表示]をクリックし、
先ほど覚えておいたマクロ名を選択して[編集]クリックします。
Visual Basic Editorが開きますので
ここで記録されたマクロを確認できます。

マクロ記録一例:

Sub Macro1()
'
' Macro1 Macro
'

'
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = "$A$1:$R$66"
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftHeader = "&""HGPゴシックE,太字""&14&U&K08+036ヘッダー左側"
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.708661417322835)
        .RightMargin = Application.InchesToPoints(0.708661417322835)
        .TopMargin = Application.InchesToPoints(0.748031496062992)
        .BottomMargin = Application.InchesToPoints(0.748031496062992)
        .HeaderMargin = Application.InchesToPoints(0.31496062992126)
        .FooterMargin = Application.InchesToPoints(0.31496062992126)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    Application.PrintCommunication = True
End Sub

マクロの自動記録では特に変更していないものまで
一式で記録されてしますので難しく感じますが、
ここではヘッダー・フッターのフォント設定のみしたいので
必要部分は次の部分のみです。

.LeftHeader = "&""HGPゴシックE,太字""&14&U&K08+036ヘッダー左側"
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""

さらに、
今回はヘッダー左側しか使用していないので
LeftHeader以外は不要ですので削除して整理すると
次のコードのようになります。

ヘッダー・フッターの文字書式を設定するコード1:

Sub macro20200402a()
'ヘッダー・フッターの文字書式の設定

    With ActiveSheet.PageSetup
        .LeftHeader = "&""HGPゴシックE,太字""&14&U&K08+036ヘッダー左側"
    End With
   
End Sub

上のコードでは文字書式のみではなく
文字列も指定しますが、
文字は入力されていて書式のみ変えたい場合は
次のようになります。

ヘッダー・フッターの文字書式を設定するコード2:

Sub macro20200402b()
'ヘッダー・フッターの文字書式の設定

    With ActiveSheet.PageSetup
        .LeftHeader = "&""HGPゴシックE,太字""&14&U&K08+036" & .LeftHeader
    End With
   
End Sub

次は、
文字列を変数で指定する方法に変更してみます。

ヘッダー・フッターの文字書式を設定するコード3:

Sub macro20200402c()
'ヘッダー・フッターの文字書式の設定
    Dim str As String
    str = "ヘッダー左側"
   
    With ActiveSheet.PageSetup
        .LeftHeader = "&""HGPゴシックE,太字""&14&U&K08+036" & str
    End With
   
End Sub

使用Ver:Excel For Office365

 

| | コメント (0)

« 2020年3月 | トップページ | 2020年5月 »