はじめに
表の中に空白行および空白セルがあった場合、空白行は削除し、空白セルがある行はエラーとして別シートに保存するプログラムを書く。
重複名簿は、同じデータが入っている場合に、新しい方のデータに古いデータ番号を記述するプログラムを書く。
問題1


元データから、エラーを抽出するプログラムを書け。
解答
データ
注文番号 | 注文日 | 顧客名 | 商品名 | 数量 |
772204 | 2022/10/1 | 株式会社モーリス | 刃具部品 | 100 |
328352 | 2022/10/1 | 英産業株式会社 | 治工具 | 600 |
202610 | 2022/10/1 | ヒマラヤ株式会社 | 電子部品金型 | |
692409 | 2022/10/2 | 西園寺鉄鋼株式会社 | コネクター金型 | 300 |
099763 | 2022/10/2 | 西園寺鉄鋼株式会社 | 500 | |
712421 | 2022/10/2 | 株式会社ロードス | プラスチック金型 | 300 |
611683 | 2022/10/3 | ヒマラヤ株式会社 | 電子部品金型 | 400 |
863786 | 2022/10/3 | 株式会社橘 | 治工具 | 500 |
445160 | 2022/10/3 | 治工具 | 200 | |
256057 | 2022/10/4 | ユビネックス商事(株) | プラスチック金型 | 900 |
920339 | 2022/10/4 | テンジンパイプ株式会社 | ダイヤモンド金型 | |
386812 | 2022/10/4 | 大竹工機株式会社 | 電子部品金型 | 500 |
792409 | 2022/10/5 | 三崎産業株式会社 | 刃具部品 | 800 |
992272 | 2022/10/5 | ヒマラヤ株式会社 | 100 | |
111637 | 2022/10/5 | 三崎産業株式会社 | 刃具部品 | 100 |
176220 | 2022/10/6 | ユビネックス商事(株) | プラスチック金型 | 500 |
697265 | 2022/10/6 | オール鉄鋼株式会社 | 超硬金型部品 | |
105005 | 2022/10/6 | (株)カドワキ | 電子部品金型 | 100 |
932738 | 2022/10/6 | 超硬金型部品 | 100 |
コード
Option Explicit
Option Base 1
Sub main()
Dim written As Integer, i As Integer, blnkcll As Integer
Dim rng As Range
Sheets("エラー").UsedRange.Offset(1, 0).EntireRow.Delete
written = 2
With Sheets("注文一覧")
For i = 2 To .UsedRange.Rows.Count
Set rng = .Range("A" & i, "E" & i)
blnkcll = WorksheetFunction.CountBlank(rng)
If blnkcll > 0 Then
If blnkcll < 5 Then
rng.Copy Sheets("エラー").Cells(written, 1)
written = written + 1
End If
.Cells(i, 1).EntireRow.Delete
End If
Next i
End With
End Sub
ここでは、CurrentRegionではなくusedrangeを用いたが、どちらを使ってもいい。空白セルをとるにはワークシート関数のCountBlankを用いて、空白が5列より少なければエラーシートへ出力し、5列かそれ以上であれば削除している。コードの流れとしてはこの程度である。
後は、元表に挿入したコマンドボタンにmainを登録するだけである。
元表の結果
エラーシートの結果
問題2
重複したデータを抽出し、古い会員番号を新しい会員の右端へ記入せよ。
解答
データ
会員番号 | 氏名 | 生年月日 | 重複番号 |
S001 | 谷口 こころ | 1990/3/11 | |
S002 | 伊藤 愛実 | 1975/5/18 | |
S003 | 斉藤 葵 | 1984/2/10 | |
S004 | 久保 琉生 | 1982/8/14 | |
S005 | 新井 歩夢 | 1971/7/1 | |
S006 | 太田 美結 | 1985/6/13 | |
S007 | 久保 琉生 | 1982/8/14 | |
S008 | 大塚 瑞希 | 1979/4/11 | |
S009 | 坂本 彩 | 1999/5/14 | |
S010 | 伊藤 愛実 | 1975/5/18 | |
S011 | 後藤 綾香 | 1966/3/9 | |
S012 | 谷口 こころ | 1990/3/11 | |
S013 | 近藤 大地 | 1972/7/10 | |
S014 | 坂本 彩 | 1999/5/14 | |
S015 | 大塚 瑞希 | 1979/4/11 |
コード
Option Explicit
Option Base 1
Sub main()
Dim cstmr As Variant
Dim i As Integer, j As Integer
Dim member As String, namedt As String, brthdy As String
Dim member1 As String, namedt1 As String, brthdy1 As String
cstmr = Sheets("顧客名簿").Range("A1").CurrentRegion
For i = UBound(cstmr) To 2 Step -1
member = cstmr(i, 1)
namedt = cstmr(i, 2)
brthdy = cstmr(i, 3)
For j = 2 To UBound(cstmr)
member1 = cstmr(j, 1)
namedt1 = cstmr(j, 2)
brthdy1 = cstmr(j, 3)
If member > member1 And namedt = namedt1 And brthdy = brthdy1 Then
Sheets("顧客名簿").Cells(i, 4).Value = member1
Exit For
End If
Next j
Next i
End Sub
外側のFor Next文は、最下行から上へ走らせ、内側のFor Next文は最上位から下へ走らせている。ここで条件が一致したら、4列目(右端)に会員番号を書くようにしている。動きとしては最下行1行に対して内側の最上位から最終行へはしらせ、というように、外側一行に対して内側は全部を走破している点に注意して欲しい。
コードは以上である。
実行した結果
サイトご利用方法
次のページ・前のページを利用するよりも、グローバルメニュー(ヘッダー部分にある項目)・サブメニュー記事の項目をクリックしていただければ、その項目の全体像が一目でみることができ、クリックすればそのサイトへ飛びます。
google、yahoo、Bingなどで検索する場合、検索ワードは先頭に、孤立じじい、と入力しその後に、グローバルメニュー・サブメニュー記事のどれかひとつの項目を入力すると、その検索サイトが上位表示されます。