質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

10571閲覧

エクセル マクロでデータベース的なシートから台帳を作成したい

marutoki

総合スコア16

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2017/01/06 04:51

初心者です、お世話になります。
今まで商品の写真付き台帳を手入力していたのですが、誤入力が多く、
データベース的シート(以下、Masterシート)からデータを引っ張って台帳を作成したいです。

いろいろ試したのですが、Masterシート上の新規シートで台帳を完成させ、
その台帳シートのみマクロを外し、別ブックに保存といった流れがエラーも少ないと思います。
Masterシート、台帳ともなるべくマクロを作成しやすいように考えてレイアウトしましたが、
この限りではありません。

やりたいこと、
1:台帳作成開始シートにあらかじめ台帳のレイアウトを入れておく。
そこに、「台帳作成開始」ボタンと「完成&保存」ボタンを作る。

2:Masterシートの選択と原価の選択
Masterシートはシート名「春夏」、「秋冬」・・・と複数あります。
「台帳作成開始」ボタンでマクロ実行後、msgboxで「どのMasterシートを使用しますか?」と出て使用するMasterシートを選択。
次に、販売原価が店舗によって異なるためO列~A店、B店というように原価を記載しています。
msgboxで「どの店の台帳を作りますか?」と出て店舗(列)を選択。

※どちらもマクロ上で名前は入力し、今後増える場合にも対処したい。

2:選択されたシートと店舗(列)を使用し、台帳を作成。
msgboxで店舗(列)まで選ばれた時点で台帳作成シートをコピーし、新規シートに貼り付け。(できれば「台帳作成開始」ボタン削除)
「品名」右の空欄をアアクティブでプルダウンメニューに品名が表示され、選択すると写真も含め、関連するデータが貼り付けられる。
空欄にするとすべて消える。
※参考になるか分かりませんが、以前作成いただいたマクロを記載します。こちらは別ブックからMasterシートを取り込むマクロを実行した後、台帳に転記するマクロです。

3:選択した店舗(列)の店名をM1に転記

4:台帳が完成したら、「完成&保存」ボタンを押す。
保存先を指定し、保存するとマクロのない作成した台帳シートのみが保存される。
xlsx形式の保存で事足りるならそれでも構いません。

以上の流れです。
つたない説明ですが、よろしくお願いします。

VBA

1Private Sub Worksheet_Change(ByVal Target As Range) 2Dim rr As Long, cc As Integer 3Dim hno As String 4Dim sh As Worksheet 5Dim rng As Range 6Dim tmp As Variant 7Dim shp As Shape 8Dim fname As String 9'Constステートメント=定数定義 10Const fpath As String = "\\○○\○○\商品Master\" 11rr = Target.Row 12cc = Target.Column 13 14If rr > Cells(Rows.Count, "C").End(xlUp).Row Or rr Mod 7 <> 4 _ 15Or (cc <> 3 And cc <> 9 And cc <> 15) Then Exit Sub 16Application.ScreenUpdating = False 17Application.EnableEvents = False 18 19'削除 20If Target.Value = "" Then 21Range(Cells(rr, cc), Cells(rr + 6, cc)).ClearContents 22Range(Cells(rr, cc + 1), Cells(rr + 4, cc + 2)).ClearContents 23Cells(rr + 6, cc + 1).Value = "" 24'画像削除 25For Each shp In Shapes 26If shp.Type = msoLinkedPicture Or shp.Type = msoPicture Then 27If Not Intersect(shp.TopLeftCell, Target.Offset(0, -2)) Is Nothing Then 28shp.Delete 29End If 30End If 31Next shp 32'登録 33Else 34'Inster("ABCDE","D")は、数値の「4」を返します。 35hno = Left(Target.Value, InStr(Target.Value, " ") - 1) 36Set sh = Worksheets("Master") 37With sh 38Set rng = .Range("A1:A" & .Cells(Rows.Count, "A").End(xlUp).Row) 39tmp = Application.Match(hno, rng, 0) 40If IsError(tmp) Then 41MsgBox "画像はありません" 42Exit Sub 43Else 44 45Target.Value = hno 46Target.Offset(1, 0).Value = .Range("B" & tmp).Value 47Target.Offset(2, 0).Value = .Range("C" & tmp).Value 48Target.Offset(3, 0).Value = .Range("D" & tmp).Value 49Target.Offset(4, 0).Value = .Range("E" & tmp).Value 50Target.Offset(5, 0).Value = .Range("F" & tmp).Value 51Target.Offset(6, 0).Value = .Range("G" & tmp).Value 52Target.Offset(0, 1).Value = .Range("I" & tmp).Value 53Target.Offset(0, 2).Value = .Range("J" & tmp).Value 54Target.Offset(1, 1).Value = .Range("K" & tmp).Value 55Target.Offset(1, 2).Value = .Range("L" & tmp).Value 56Target.Offset(2, 1).Value = .Range("M" & tmp).Value 57Target.Offset(2, 2).Value = .Range("N" & tmp).Value 58Target.Offset(3, 1).Value = .Range("O" & tmp).Value 59Target.Offset(3, 2).Value = .Range("P" & tmp).Value 60Target.Offset(4, 1).Value = .Range("Q" & tmp).Value 61Target.Offset(4, 2).Value = .Range("R" & tmp).Value 62Target.Offset(6, 1).Value = .Range("S" & tmp).Value 63'画像 64fname = fpath & .Range("H" & tmp).Value 65With Target.Offset(0, -2) 66Set shp = ActiveSheet.Shapes.AddPicture(Filename:=fname, _ 67LinkToFile:=False, SaveWithDocument:=True, _ 68Left:=.Left, Top:=.Top, Width:=.MergeArea.Width, Height:=.MergeArea.Height) 69End With 70End If 71End With 72End If 73Application.EnableEvents = True 74Application.ScreenUpdating = True 75End Sub 76 77

Masterシート
台帳シート

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takito

2017/01/06 05:52

具体的にはどんな問題が起きていて何に困っているのでしょうか?
marutoki

2017/01/06 07:39

前マクロでは台帳ブックにマクロを置き、別ブックのMasterというシートを取り込んでいました。何度か台帳をコピーしたり編集したりすると「読み取れない内容があります。回復しますか?」と出て「はい」とすると「削除された機能: /xl/worksheets/sheet1.xml パーツ内のデータの入力規則」と出ます。マクロは動きます。あと台帳をメールする時、Masterシートとマクロを除外して送付するのが面倒でした。今回は一度作ったものを修正する時は手修正するつもりです。
marutoki

2017/01/06 07:43

根本的な話でしたら、知識不足で困っています。このイメージのマクロを自分で作ろうとするとなかなか時間が取れず1年くらい勉強しないと出来そうにないです。
takito

2017/01/06 07:47

今回お作りになったマクロなりエクセルなりで何かエラーが出ているのでしょうか?それともどなたかに作って欲しいのでしょうか?
marutoki

2017/01/06 08:10

この流れのマクロを作成いただきたいです。今回、まだマクロは作成してません。掲載しているマクロは参考で自分で作ってはいませんし、応用もできません。応用できるようなら使ってください。こんな手のかかるもん一から?って事でしたら諦めます。
takito

2017/01/06 09:17

業務利用のためにシステムを作ってください、とおっしゃっているように思います。技術的な壁にぶつかった人の解決の手助けをするのがこのサイトの役割と思います。ソフトウェアを作れない人の代わりに作ってあげるためのサイトではないですし、それって本来はお金を払って依頼するようなものではないでしょうか。ひょっとしたら誰かが気軽にマクロを書いてくれるかもしれませんが、少々善意に頼りすぎていませんか。せっかくですから、これを機にマクロを勉強されてはいかがでしょう?(と、やりとりしているうちに誰かがせっせと作ってくれたらラッキーですね)
marutoki

2017/01/06 12:48

そうですよね、初めて利用させていただいたのですが、中級者向けのサイトといった印象です。もちろんこれだけの物ですからお金を払ってでも作りたい。でもどこに頼んだらいいのか。とにかく自分なりに勉強してみるしかないですね。
guest

回答1

0

自己解決

善意に頼りすぎていました。
そもそも、知識が浅はかすぎて善意と作成依頼の判断難しいですね。
私レベルでは全て有料案件に見えます(笑)
今回で判断がざっくり付いたので次回質問の際は一線超えないよう気を付けます。

※この案件はランサーズというスキル内職サイトの職人の方に仕事として依頼することにしました。

投稿2017/01/07 08:17

marutoki

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問