VBAで「行の挿入・削除」やってみる

目安時間:約 3分

今回は、行の挿入、削除を行います。
【課題】
区分がD、No.が空欄の行を削除する。
区分がIの行の前に新規行を挿入する。
No.を上から昇順で振り直す

【VBA】

Sub InsDel()
    Dim i As Long
    Dim lp As Long
    lp = Cells(Rows.Count, 1).End(xlUp).Row - 1
    For i = lp To 2 Step -1
        Select Case Cells(i, 2)
            Case ""
                Rows(i).Delete
        End Select
        Select Case Cells(i, 1)
            Case "I"
                Rows(i).Insert
            Case "D"
                Rows(i).Delete
        End Select
    Next
    lp = Cells(Rows.Count, 1).End(xlUp).Row - 1
    For i = 2 To lp
        Cells(i, 2) = i - 1
    Next
End Sub


簡単な説明
・「Cells(Rows.Count, 1).End(xlUp).Row」は、以前説明をしたのでこちらを御覧ください
A列の最後の「E」行までの行数を取得
・「Rows(i).Delete」は、行を削除する
A列の「D」が記入されているところと、B列の空欄の行を削除する
・「Rows(i).Insert」は、行を追加する
A列の「I」が記入されているところの前に1行追加する
・「Cells(i, 2) = i - 1」のForは、前処理の行の追加削除後にNo.を振り直すループを行う
・Selectについては、前回に説明したこの記事を御覧ください。

あなたのお役に立てるなら、コピーして使用してください。

今後も勉強した内容を記載して行きますので、お役に立てるものがあれば使ってください。

VBA開発もしておりますので開発のご要望があればご連絡をください。

VBA開発依頼受付はこちらから

VBAで「文字列の切り出しと文字列の結合」やってみる

目安時間:約 5分

今回は、文字列の切り出し、文字列の結合を行います。
「最高に色っぽい女優ランキング」から名前を使わせて頂きました。
【課題】
漢字の苗字、ふりがなの苗字、漢字の名前、ふりがなの名前を使い
漢字の苗字名前をC列に設定、ふりがなの苗字名前をD列に設定する
例:深田(ふかだ)恭子(きょうこ)の場合
 C列:深田恭子
 D列:ふかだきょうこ

【VBA】

Sub cutUnion()
    Dim i As Long
    '苗字変数
    Dim miyo1 As String
    Dim miyo2 As String
    Dim miyobuf1 As String
    Dim miyobuf2 As String
    Dim miyobuf3 As String
    '名前変数
    Dim name1 As String
    Dim name2 As String
    Dim namebuf1 As String
    Dim namebuf2 As String
    Dim namebuf3 As String
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        miyobuf1 = InStr(Cells(i, 1), "(")
        miyobuf2 = InStr(Cells(i, 1), ")") - 1
        miyobuf3 = miyobuf2 - miyobuf1
        miyo1 = Left(Cells(i, 1), miyobuf1 - 1)
        miyo2 = Mid(Cells(i, 1), miyobuf1 + 1, miyobuf3)

        namebuf1 = InStr(Cells(i, 2), "(")
        namebuf2 = InStr(Cells(i, 2), ")") - 1
        namebuf3 = namebuf2 - namebuf1
        name1 = Left(Cells(i, 2), namebuf1 - 1)
        name2 = Mid(Cells(i, 2), namebuf1 + 1, namebuf3)
       ' 苗字名前
       Cells(i, 3) = miyo1 & name1
       ' 苗字名前(ふりがな)
       Cells(i, 4) = miyo2 & name2
    Next
End Sub


簡単な説明
・「Cells(Rows.Count, 1).End(xlUp).Row」は、以前説明をしたのでこちらを御覧ください
・「miyobuf1 = InStr(Cells(i, 1), "(")」は、「"("」の位置を取得する
 「深田(ふかだ)」の場合、3を取得する
・「miyobuf2 = InStr(Cells(i, 1), ")") - 1」は、「")"」の位置を取得し、-1をする
 「深田(ふかだ)」の場合、6を取得する
・「miyobuf3 = miyobuf2 - miyobuf1」は、「深田(ふかだ)」の「ふかだ」を取得する文字数を取得する
・「miyo1 = Left(Cells(i, 1), miyobuf1 - 1)」は、「深田(ふかだ)」の左から「miyobuf1 - 1:3−1=2」2文字取得する
・「miyo2 = Mid(Cells(i, 1), miyobuf1 + 1, miyobuf3)」は、「深田(ふかだ)」の左の「miyobuf1 + 1:4」文字目から「miyobuf3:3」文字いを取得する。
 「深田(ふかだ)」の場合、「ふかだ」を取得する。

あなたのお役に立てるなら、コピーして使用してください。

今後も勉強した内容を記載して行きますので、お役に立てるものがあれば使ってください。

VBA開発もしておりますので開発のご要望があればご連絡をください。

VBA開発依頼受付はこちらから

VBAで「日付と曜日」使って集計表示する

目安時間:約 5分

今回は、日付から曜日を求めて「売上合計」「日数」「平均売上」を集計する
【課題】
売上合計が多い順に背景色を設定
売上合計1位背景色 → 赤
売上合計2位背景色 → 緑
売上合計3位背景色 → 水色
G2〜I8に「売上合計」「日数」「平均売上」を設定する

【VBA】

Sub weekdate()
    Dim i As Long
    Dim lp As Long
    Dim intW As Integer
    Range("G2:I8").ClearContents
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        intW = Weekday(DateSerial(Cells(i, 1), Cells(i, 2), Cells(i, 3)), vbMonday)
        Cells(intW + 1, 7) = Cells(intW + 1, 7) + Cells(i, 4)
        Cells(intW + 1, 8) = Cells(intW + 1, 8) + 1
    Next
    For i = 1 To 7
        Cells(i + 1, 9) = Cells(i + 1, 7) / Cells(i + 1, 8)
    Next
    Set rng_jp = Range("G2:G8")
    lp = 2
    For Each Rng In rng_jp
        rk = WorksheetFunction.Rank(Rng.Value, rng_jp)
        Select Case rk
            Case 1
                Cells(lp, 7).Interior.Color = vbRed
            Case 2
                Cells(lp, 7).Interior.Color = vbGreen
            Case 3
                Cells(lp, 7).Interior.Color = vbCyan
        End Select
        lp = lp + 1
    Next
End Sub


簡単な説明
・「Range("G2:I8").ClearContents」では、セル範囲の値をクリアをする
・「Cells(Rows.Count, 1).End(xlUp).Row」は以前説明をしたのでこちらを御覧ください
・「DateSerial(year,month,day)」は、3つの引数で指定された日付を意味するシリアル値を返す
ー 引数yearは、年を表す0〜9999の範囲の数値または数式を指定します。
ー 引数monthは、月を表す1〜12の範囲の数値または数式を指定します。
ー 引数dayは、日を表す1〜31の範囲の数値または数式を指定します。
ー ※ 引数yearに0〜29を指定すると、2000年〜2029年と読み替えられます。
ー また、30〜99を指定すると、1939年〜1999年と読み替えられます。
・「Weekday(シリアル値,種類)」は、シリアル値から曜日に対応する数値を求める。
・「vbMonday」は、「DateSerial(Cells(i, 1), Cells(i, 2), Cells(i, 3))」で指定した日付が何曜日かを返す。
・「Cells(i + 1, 9) = Cells(i + 1, 7) / Cells(i + 1, 8)」は平均売上を算出する。
・「Set rng_jp = Range("G2:G8")」は、Setを使ってRange型変数に代入する。
・「WorksheetFunction.Rank(Rng.Value, rng_jp)」は、指定された範囲の中で数値の高い順位を返します。
・「Select Case rk」は、1〜3位の背景色を設定する。

あなたのお役に立てるなら、コピーして使用してください。

今後も勉強した内容を記載して行きますので、お役に立てるものがあれば使ってください。

VBA開発もしておりますので開発のご要望があればご連絡をください。

VBA開発依頼受付はこちらから

プロフィール

50歳、派遣社員。コロナ禍の中いつもいつも派遣切りにビクビクしながら生きています。50歳という大台を迎えると、次の就職先は無いに等しい状況なのに現在ではコロナ禍で、さらに就職先がないです。でも、家庭を支えなければならない。だから私は、複数の仕事が出来るように在宅ワークが出来るプログラミング、ブログを選択。50歳からの挑戦です。フリーランスを目指してプログラミング、ブログを始めました。

それと、子供が私立の中学校に行っているので学費を稼がなければ・・・

私と一緒に始めませんか?

お問い合わせ
プログラミング依頼

 

最近の投稿
アーカイブ

ページの先頭へ