[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オブジェクトを操作する』(右近)
こんばんは。
データを作成する中で、一つ教えて頂きたいことがあり、質問させて頂きませ。
以下のように請求者と承認者の欄に、リストから選択すると、予め登録しておいたオブジェクトを挿入したいと考えておりますが、よろしくお願いします。
C D 1 請求 承認 2 山田 右近 3 山田 右近 4 山田 右近
C列、D列それぞれ同一の名前になります。
リストは、C列は山田、D列は右近を選択します。
オブジェクトは、印鑑形式としてますので、縦書きを円で囲んだものを考えております。
何卒よろしくお願いします。
< 使用 Excel:Excel2013、使用 OS:Windows10 >
直接の回答ではありません。 参考HPです。
Office TANAKA - Excel(自動的に画像を切り替える) http://www.officetanaka.net/excel/function/tips/tips14.htm
Excel一般機能:画像の検索ページを作る http://www.geocities.jp/chiquilin_site/data/050530_search.html (カリーニン) 2017/01/07(土) 19:28
このテーマを解決する方法としては、紐付いた画像を挿入するということも、もちろんありうるわけですが カリーニンさんが参考提示されたページのアイデア、こういった手法も、有効な方法だと思いますよ。
方式にこだわらず、いろんんなやり方を検討することは、よりよい解決方法の模索というか、解決に至る 早道 になるかもしれません。
まぁ、それはさておき。
>>リストから選択すると
このリストとは? 入力規則でしょうか?
>>C列、D列それぞれ同一の名前になります。
いつも 請求者が 山田、承認者が 右近 ということですか?
>>予め登録しておいたオブジェクトを挿入したい
その、あらかじめ登録しておいたオブジェクト なるものは、どこに、どんな形で存在するのですか? また、挿入する場所と大きさは? 該当のセルの中央に、すっぽりと入るぐらいの場所と大きさと考えていいのですか?
>>良きお知恵をお願いいたします。
良き知恵とは? アイデアを提示すればいいのですか?
(β) 2017/01/07(土) 22:29
リストから選択すると
このリストとは? 入力規則でしょうか?
はい、入力規則のリストです。
>>C列、D列それぞれ同一の名前になります。
いつも 請求者が 山田、承認者が 右近 ということですか?
はい、そうです。一つ完成すれば、請求者が代わったとしても流用できるのかと思います。
>>予め登録しておいたオブジェクトを挿入したい
その、あらかじめ登録しておいたオブジェクト なるものは、どこに、どんな形で存在するのですか? また、挿入する場所と大きさは? 該当のセルの中央に、すっぽりと入るぐらいの場所と大きさと考えていいのですか?
現状は、同一シート内に一つずつ作っています。
列幅3.8程度、行の高さ29程度に若干余裕をもってセルの中央にすっぽり入る程度で考えています。
>>良きお知恵をお願いいたします。 良き知恵とは? アイデアを提示すればいいのですか?
なかなか行き詰ってまして、よろしくお願いします。
(右近) 2017/01/07(土) 22:44
>>なかなか行き詰ってまして、よろしくお願いします。
カリーニンさんの紹介URLの方式は、なぜ NG だったのでしょうか? 数式等を中心にして処理するなら、紹介ページにあった方式がベストというか、それ以外では困難でしょう。
これがNGということは、マクロで対応したいということでしょうか?
あるいは、ネットを検索すると、印鑑押印のフリーアドインがたくさんありますが、そういったものを 使いたいということでしょうか?
>>一つ完成すれば、請求者が代わったとしても流用できるのかと思います。
まだイメージがつかめません。 本当に 1つのシートでは、絶対に、請求者と承認者は1人ずつでしょうか? 行によって 請求者が 山田 であったり 鈴木 であったり、そういうことは絶対にないということですか?
絶対に1名しかいないということなら、なぜ 『リストから選択』するのですか?
(β) 2017/01/08(日) 01:38
かといって代案は無いのですが・・・^^;
フリーの印鑑のアドインを導入に1票
(まっつわん) 2017/01/08(日) 08:18
申請者が申請して、承認者が承認を行うという、いわゆる【ワークフロー】のようなものを考えているのでしょうか?
もしそうなら、印鑑云々ではなく、本当に【ワークフロー管理】をするというのがよろしいのでは?
『無償 ワークフローソフト』あたりで検索すると、無料で使えるソフトがいくつも見つかります。
カリーニンさん紹介のページの方式、名前列と印鑑列をわければ、使えると思うのですが、 名前選択前は空白にしておきたいというところがネックでしょうかね?
仮に、ゴリゴリ VBA で対応するとすれば。
まず、シートのどこかにある印鑑群の名前を、リストから選ぶ名前と同じにしておきます。
で、シートモジュールに。 リストから選んだ名前の印鑑がなかった場合のエラー対応はしていません。
しかし・・・・
こんなことをしても、まっつわんさん指摘通り、だれでも、どの名前でも選択できるわけで ということは、他人の印鑑おしまくり可能。
こういった管理に何の意味があるのかなぁ・・・・????
Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range Dim c As Range Dim spN As String Dim spO As String
Set r = Intersect(Target, Columns("C:D")) If r Is Nothing Then Exit Sub
For Each c In r spN = "sp_" & c.Address(False, False) spO = c.Value On Error Resume Next Shapes(spN).Delete On Error GoTo 0 If Not IsEmpty(c) Then With Shapes(spO).Duplicate .Name = spN .Left = c.Left + c.Width / 2 - .Width / 2 .Top = c.Top + c.Height / 2 - .Height / 2 End With End If Next
End Sub
(β) 2017/01/08(日) 08:28
>>カリーニンさんの紹介URLの方式は、なぜ NG だったのでしょうか? 数式等を中心にして処理するなら、紹介ページにあった方式がベストというか、それ以外では困難でしょう。 これがNGということは、マクロで対応したいということでしょうか? あるいは、ネットを検索すると、印鑑押印のフリーアドインがたくさんありますが、そういったものを 使いたいということでしょうか?
NGということでありません。マクロ・・・これという自分のビジョンをもてていません。申し訳ありません。
フリーアドインも使ってはみました。電子印鑑というものでした。
>>まだイメージがつかめません。 本当に 1つのシートでは、絶対に、請求者と承認者は1人ずつでしょうか? 行によって 請求者が 山田 であったり 鈴木 であったり、そういうことは絶対にないということですか? 絶対に1名しかいないということなら、なぜ 『リストから選択』するのですか?
はい、1つのシートで請求者と承認者は1人ずつになります。
必ずしもリストでないといけないわけではありませんが、オブジェクトを挿入したいセルにオブジェクトを呼び出すための何らかの入力をする必要があるため、入力内容はすべて同じでよいので、リストが良いのかと思っただけです。
申請者が申請して、承認者が承認を行うという、いわゆる【ワークフロー】のようなものを考えているのでしょうか?
>>もしそうなら、印鑑云々ではなく、本当に【ワークフロー管理】をするというのがよろしいのでは? ワークフロー管理・・・
現状は、印鑑のようなオブジェクトを作成して、そのセルに必要な場合にコピーして使用しているのですが、できれば、オブジェクトそのものではなく、オブジェクトをセルごとコピーしたいのですが、その場合どうしてもオブジェクトを選択してしまいます。これをオブジェクトを選択させず、セルをフィルさせてコピーする方法はありますでしょうか?保護をかけて、セルの書式設定オン、オブジェクトの編集オフではフィルしてもコピーされません。この状態でオブジェクトもコピーすることができればとは思うのですが・・・
(右近) 2017/01/08(日) 09:29
> オブジェクトの編集オフではフィルしてもコピーされません。 > この状態でオブジェクトもコピーすることができればとは思うのですが・・・ それは無理です。 オブジェクトの編集を認めていないのですから。 ところで、承認行為自体は誰でも可能なんですか? セキュリティとかはどのように整理されているのですか?
(γ) 2017/01/08(日) 09:40
う〜ん・・・・・
皆さんが指摘されている、権限の問題に対して、全く検討されていないですねぇ・・・
何かをどのように管理したい という 『要件』があって、その要件を満たすための方式、『仕様』を考える。 もしかしたら、その仕様は要件を満たす上で、不備があるかもしれない、間違っているかもしれない。
でも、肝心の『要件』の説明はなく、あくまで右近さんが考えた『仕様』のみが(しかも、ぼんやりと)提示されて テクニックとしてどうしたらいいかという質問になっています。
こういった状況ではお手伝いをしようとしても空回りになるだけですので、 しばらくROMに回ります。
(β) 2017/01/08(日) 09:52
また、なにか思いつけば書きます。
(まっつわん) 2017/01/08(日) 10:50
つまり、如何にして手数や操作を少なくして図形のコピペをするか
というのがテーマですよね。
コピーしたい図形をクリック
↓
コピーした図形がマウスカーソルに追随
↓
貼り付けたい位置でもう一回クリック
↓
そこに貼りつく
というような挙動を作ってみました。
Ctrlキーを押しながらドラッグするのと大差ないうえに、
バグがあるかも知れないので、自己責任でテストしてください。
(まっつわん) 2017/01/10(火) 12:11
Option Explicit
Private Type POINTAPI
x As Long y As Long End Type
Private Declare Sub Sleep Lib "KERNEL32.dll" (ByVal dwMilliseconds As Long)
Private Declare Function GetCursorPos Lib "user32.dll" (lpPoint As POINTAPI) As Long
Private mFlg As Boolean
Sub Shapeをマウスカーソル位置にセット()
Dim rngTopLeft As Range Dim shpTarget As Shape Dim MoP As POINTAPI Dim x1 As Long, y1 As Long
If mFlg Then mFlg = False Exit Sub End If
mFlg = True With ActiveSheet.Shapes(Application.Caller) .Copy .Parent.Paste .TopLeftCell End With ActiveCell.Select Set shpTarget = ActiveSheet.Shapes(ActiveSheet.Shapes.Count) Set rngTopLeft = ActiveWindow.VisibleRange.Range("A1") y1 = ActiveWindow.PointsToScreenPixelsY((rngTopLeft.Top) * 96 / 72) x1 = ActiveWindow.PointsToScreenPixelsX((rngTopLeft.Left) * 96 / 72)
Do While mFlg = True DoEvents Sleep 3
Call GetCursorPos(MoP) With shpTarget .Top = (MoP.y - y1) * 72 / 96 + rngTopLeft.Top - .Height + 15 .Left = (MoP.x - x1) * 72 / 96 + rngTopLeft.Left - .Width + 10 End With Loop End Sub (まっつわん) 2017/01/10(火) 12:14
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.