LoginSignup
1
1

More than 5 years have passed since last update.

鉄筋CADの出力データをExcelのデータベースに変換

Last updated at Posted at 2018-04-05

CADシステムから出力される Excel ファイル をデータベースに変換するマクロを作成しました。

出力レイアウトは、見やすさ重視

キレイに出力してくれるのですが、データを再利用するには、手間がかかります。

image.png

データベースは、データの再利用重視

このデータを再利用しやすいように、下図のように変換するマクロを作成しました。

image.png

VBA サンプルプログラム

変換処理は、下記のようにしています。

sample.vb
Private Sub s_発注データ変換()
  Dim wBKName  As String
  Dim w基準Row As Integer
  Dim w基準Col As Integer
  Dim wRow     As Integer
  Dim wCol     As Integer
  Dim wPage    As Integer
  Dim wNo      As Integer
  Dim w      As Integer
  Dim w工事名  As String
  Dim wRange   As String
  Dim wTest    As String

  Workbooks(gBookName).Worksheets("発注データ").Range("B6:M1005").ClearContents

  wBKName = fnPickFile(sFileName)

  Application.ScreenUpdating = False
  Workbooks.Open FileName:=sFileName

  With Workbooks(wBKName).Worksheets(1)
    w = 6
    wPage = 1

    Do

      w基準Row = 1 + (wPage - 1) * 29

      wRow = w基準Row + 4
      wCol = 4
      w工事名 = .Cells(wRow, wCol).Value
      If w工事名 = "" Or wPage > 100 Then Exit Do

      If wPage = 1 Then
        Workbooks(gBookName).Worksheets("発注データ").Cells(3, 3).Value = w工事名
      End If

      For wNo = 1 To 10
        wRow = w基準Row + 8 + (wNo - 1) * 2 + 1
        wCol = 3
        wRange = .Cells(wRow, wCol).Address(False, False)

        '発注データシートに転記
        Workbooks(gBookName).Worksheets("発注データ").Cells(w, 2).Value = .Cells(wRow, wCol).Value            '符号
        Workbooks(gBookName).Worksheets("発注データ").Cells(w, 3).Value = .Cells(wRow + 1, wCol).Value        '厚さ
        Workbooks(gBookName).Worksheets("発注データ").Cells(w, 4).Value = .Cells(wRow, wCol + 3).Value        'キリ径
        Workbooks(gBookName).Worksheets("発注データ").Cells(w, 5).Value = .Cells(wRow, wCol + 4).Value        '枚数
        Workbooks(gBookName).Worksheets("発注データ").Cells(w, 6).Value = .Cells(wRow + 1, wCol + 4).Value    '寸法
        Workbooks(gBookName).Worksheets("発注データ").Cells(w, 7).Value = .Cells(wRow, wCol + 8).Value        '重量
        Workbooks(gBookName).Worksheets("発注データ").Cells(w, 8).Value = .Cells(wRow + 1, wCol + 8).Value    '重量
        Workbooks(gBookName).Worksheets("発注データ").Cells(w, 9).Value = .Cells(wRow, wCol + 11).Value       '単重
        Workbooks(gBookName).Worksheets("発注データ").Cells(w, 10).Value = .Cells(wRow + 1, wCol + 11).Value  '単重
        Workbooks(gBookName).Worksheets("発注データ").Cells(w, 11).Value = .Cells(wRow, wCol + 14).Value      'ロス
        Workbooks(gBookName).Worksheets("発注データ").Cells(w, 12).Value = .Cells(wRow, wCol + 17).Value      '切断
        Workbooks(gBookName).Worksheets("発注データ").Cells(w, 13).Value = .Cells(wRow + 1, wCol + 15).Value  '備考

        w = w + 1
      Next wNo

      wPage = wPage + 1
    Loop
  End With


  Workbooks(wBKName).Close savechanges:=False
  Application.ScreenUpdating = True

  '発注データ表を表示
  Workbooks(gBookName).Worksheets("発注データ").Activate
  Workbooks(gBookName).Worksheets("発注データ").Range("A1").Select
End Sub

Excel マクロメニュー サンプル

上の処理は、Excel マクロメニューを利用しています。

image.png

下記のようにメニュー名とマクロ名を登録するとメニューに表示されます。
image.png

Excelカレンダーを集計するマクロをメニュー化したサンプルです。
週間スケジュール管理

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1