[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『「データを蓄積したい。」[初心者] について』(トランプ)
投稿
[[20170204150113]] 『データを蓄積したい。』(初心者)
について...
以前、様々な方々にご指導頂いて、データを作成することができました。
このデータは、とても素晴らしいもので、色々な別のデータに活用させて頂いております。
そこで、一つご教授頂きたいことがあり、質問させて頂きます。
ここで作成したマクロのキーとなるのは「日付」ですが、このキーを「日付」+「番号」にする場合、以下の部分の★★★部分に追加の構文が必要かと思うのですが、どのような構文が必要でしょうか。
ちなみに、上記投稿の中でのキー「日付」はB7セル、今回追加したいキー「番号」はB8セルに入っているものとします。
Option Explicit
Const sh1Name As String = "入出力" Const sh2Name As String = "DB" Const sh3Name As String = "転記" Const OneWay As String = "*" Sub Posting_Input() '入力後のデータをデータベースに登録 Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet Dim v As Variant Dim row1 As Long Dim i As Long
'変数の設定 Set sh1 = Sheets(sh1Name) Set sh2 = Sheets(sh2Name) Set sh3 = Sheets(sh3Name) v = sh3.Range("A1").CurrentRegion.Value
'データの存在チェック ★★★ If sh1.Range(v(2, 2)).Value = "" Then MsgBox "日付が未入力なのでデータベースに登録できません。" Exit Sub End If If WorksheetFunction.CountIf(sh2.Range("A:A"), sh1.Range(v(2, 2))) Then If MsgBox("すでにデータベースに登録されています。" & vbLf & "上書きしますか?", vbYesNo) = vbYes Then row1 = WorksheetFunction.Match(sh1.Range(v(2, 2)), sh2.Range("A:A"), 0) Else Exit Sub End If Else row1 = sh2.Range("B" & Rows.Count).End(xlUp).Row + 1 End If
'データの転記 sh2.Unprotect "00001" For i = 2 To UBound(v, 1) sh2.Cells(row1, v(i, 3)).Value = sh1.Range(v(i, 2)).Value Next i sh2.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ReProtect sh2, "00001"
End Sub Sub Posting_Output() 'データベースのデータを読込 Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet Dim v As Variant Dim row1 As Long Dim i As Long
'変数の設定 Set sh1 = Sheets(sh1Name) Set sh2 = Sheets(sh2Name) Set sh3 = Sheets(sh3Name) v = sh3.Range("A1").CurrentRegion.Value
'データの存在チェック If sh1.Range(v(2, 2)).Value = "" Then MsgBox "日付が未入力なので読込できません。" Exit Sub End If If WorksheetFunction.CountIf(sh2.Range("A:A"), sh1.Range(v(2, 2))) Then row1 = WorksheetFunction.Match(sh1.Range(v(2, 2)), sh2.Range("A:A"), 0) Else MsgBox "該当の日付のデータがありません。" Exit Sub End If
'データの転記 For i = 2 To UBound(v, 1) If v(i, 4) <> OneWay Then sh1.Range(v(i, 2)).Value = sh2.Cells(row1, v(i, 3)).Value End If Next i
End Sub Sub Data_Clear() '表示中データのクリア Dim sh1 As Worksheet Dim sh3 As Worksheet Dim v As Variant Dim i As Long
'変数の設定 Set sh1 = Sheets(sh1Name) Set sh3 = Sheets(sh3Name) v = sh3.Range("A1").CurrentRegion.Value
'データのクリア For i = 2 To UBound(v, 1) If v(i, 4) <> OneWay Then sh1.Range(v(i, 2)).MergeArea.ClearContents End If Next i
End Sub Sub ReProtect(sh As Worksheet, Optional pwd As String = "") '現在の保護要素を継承したシート再保護 Dim pp As Protection Dim sv As Long
With sh '対象シート sv = .EnableSelection Set pp = .Protection
.Protect Password:=pwd, Contents:=True, _ DrawingObjects:=Not .ProtectDrawingObjects, _ Scenarios:=Not .ProtectScenarios, _ AllowFormattingCells:=pp.AllowFormattingCells, _ AllowFormattingColumns:=pp.AllowFormattingColumns, _ AllowFormattingRows:=pp.AllowFormattingRows, _ AllowInsertingColumns:=pp.AllowInsertingColumns, _ AllowInsertingRows:=pp.AllowInsertingRows, _ AllowInsertingHyperlinks:=pp.AllowInsertingHyperlinks, _ AllowDeletingColumns:=pp.AllowDeletingColumns, _ AllowDeletingRows:=pp.AllowDeletingRows, _ AllowSorting:=pp.AllowSorting, _ AllowFiltering:=pp.AllowFiltering, _ AllowUsingPivotTables:=pp.AllowUsingPivotTables .EnableSelection = sv End With
End Sub
ご教授よろしくお願いします。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
> ReProtect sh2, "00001"
これ何のためにありますか。
パスワード設定なら、1行前で一緒に実行でよいです。
許可したい操作も、1行前でよいです。
(マナ) 2017/03/25(土) 23:35
>sh2.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
は何のためにありますか。
(マナ) 2017/03/25(土) 23:45
sh2.Protect Password:="00001", DrawingObjects:=True, Contents:=True, Scenarios:=True
本題と関係ないことで、お邪魔しました。
(マナ) 2017/03/25(土) 23:57
To マナさん
私が回答する立場ではありませんが、私が時折アップしている ReProtect が使われていますので。
前トピで、シート保護の件について、ちょこっとコメントしました。
sh2.Protect Password:="00001", DrawingObjects:=True, Contents:=True, Scenarios:=True
これだけでは、シート保護条件として、ロックされたセル範囲の選択、ロックされていないセル範囲の選択 しか 設定されないと理解しています。
もともと設定されている条件が、これだけであればいいのですが、他の条件も許容して設定していたとすると その再現が必要になってきますね。
もちろん、それら条件を明示的に Protectメソッドで指定すればいいわけですが、もしかしたら保護条件の追加変更などもあるかもしれない。
ということで、『現在の条件を継承して保護』の話を(元トピで)しました。 コードは提示していないのですが、トランプさんが、さがして使われたのかなと、そう思っています。
(β) 2017/03/26(日) 05:18
はい、承知しています。
βさんが、解説してくださるだろうことも期待していました。
ただトランプさんが、どこまで理解されているかは?
何を許可するか(何をさせたくないか)は
トランプさんが決められる立場にあるのだから、
コードで指定すればよいだけの気がしますし、
仮に、保護条件の変更が必要になった場合、
(例えば、オートフィルタは許可したいとか)
どう修正したらよいかも、まだ理解できていないと思います。
なので、今のコードの中途半端な使い方になったのかなと。
トランプさんが、βさんのコメントを思い出し、
ReProtect を探し出してきて使ったのは、ちょっと意外でしたが
目的が、パスワードを設定したいということであれば
それは違うでしょうと思いコメントしました。
(マナ) 2017/03/26(日) 10:12
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.