Excel VBA 質問スレ Part45 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2017/01/03(火) 02:51:16.56ID:9Y8iTik6コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part44
http://echo.2ch.net/test/read.cgi/tech/1479421482/
※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 125
http://echo.2ch.net/test/read.cgi/bsoft/1481369538/
0004デフォルトの名無しさん
2017/01/05(木) 16:31:19.34ID:rordfoes0005デフォルトの名無しさん
2017/01/05(木) 17:49:33.10ID:3kVSXnTBOffice TANAKA
0006デフォルトの名無しさん
2017/01/05(木) 19:15:59.64ID:YlAAgZIP0007デフォルトの名無しさん
2017/01/05(木) 21:50:17.01ID:PrUsv/Joマクロ実行中も再計算してるのか
0008デフォルトの名無しさん
2017/01/05(木) 21:53:00.56ID:EGC2o4Lu計算止めてマクロ実行し終わるときに再計算させるんじゃダメなの?
0009デフォルトの名無しさん
2017/01/05(木) 22:36:04.40ID:fbqYOVILMe.Thread
0010デフォルトの名無しさん
2017/01/05(木) 22:50:47.05ID:olwzS93J0011デフォルトの名無しさん
2017/01/05(木) 23:06:24.30ID:fbqYOVIL半分くらいは、神エクセルを作るクソ上司対策の為にあるようなもんだけどな。
0012デフォルトの名無しさん
2017/01/06(金) 00:22:50.70ID:m+Jpe1FL作り終わったら描画と計算止めるのは速度上げたいならマストだぞ
0013デフォルトの名無しさん
2017/01/06(金) 00:32:13.04ID:yTw61UwJレベルによると思います。
マクロ少しはつかえるのか、全くダメだけどExcelは得意(関数、機能など)だとか、関数もよく分からんとか。
IF関数もよく分からないレベルだと、まずはExcelの関数(ワークシート関数)と、機能(条件付き書式とか、テーブルとか)をある程度勉強した方がいい。
0014デフォルトの名無しさん
2017/01/06(金) 19:20:32.03ID:Eygm90s9選択している写真の存在するセル領域Rangeを取得したいと思っています。
ところが、セルピッタリの位置に写真を配置(Alt+写真ドラッグ・Alt+拡大縮小)した場合に、特定のサイズの時に1セル余分に取得してしまう事が分かりました。
正確にRangeを取得できるように直したいのですが、何か良いアイディアを頂けないでしょうか。
'現在選択している写真の領域Rangeを選択状態にするテスト
Sub SelectShapeRangeTest()
Dim SP As Shape
For Each SP In Selection.Parent.Shapes
If SP.Name = Selection.Name Then Exit For
Next
Range(SP.TopLeftCell, SP.BottomRightCell).Select
End Sub
0015デフォルトの名無しさん
2017/01/06(金) 19:32:50.62ID:5HA7V59pRangeを選択してその大きさにShapeのサイズを変える
0016デフォルトの名無しさん
2017/01/06(金) 19:50:55.68ID:5HA7V59pRangeが大きくなった事を判定してRangeを小さくするとか
大きくなったRangeに合うようにShapeを移動する
例えばRangeの中心とShapeの中心が重なるようにとか
全てのShapeを同じ大きさにするとか
シートにシェイプは1つだけにしてシートの左上とシェイプの左上を合わせるとか
0017デフォルトの名無しさん
2017/01/06(金) 19:54:21.08ID:ylhkczHtスマホから、主です。
回答ありがとうございます。
たしかにこれから写真を貼るのであれば、その方法で解決すると思いますが、あくまで既に配置済みの写真から読み取る必要が有るんです。
上記はテストコードなのでセレクトしていますが、これを関数化して膨大な配置済みの写真からそれぞれのrangeを取り出すのが最終目標なので。
0018デフォルトの名無しさん
2017/01/06(金) 21:04:04.05ID:S2R5Pk4vどうせギリギリのところで次のセルに被ってるんだろ
対象のシェイプより少しだけ小さいシェイプおいて取得すりゃいいんじゃね?
0019デフォルトの名無しさん
2017/01/06(金) 21:54:38.99ID:Q5cZMFD3vbaでオラが画像を貼る時は
デフォのセルの左上を基準にするだけで
セルをはみ出そうが、画と画が被ろうが、複数枚貼っていく
その時、画像のセル位置はセーブしてるし
shapes.nameを一意に付けておくので
後でサイズ変更したり削除したり、、操作は自在なのだが
0020デフォルトの名無しさん
2017/01/06(金) 23:58:00.16ID:8yYsxO6Kマクロでvlookupを使いたいと思っているのですがエラーしか返ってこず途方にくれています。。
=VLOOKUP(D8,データ欄!$C$9:$D$28,2,FALSE)
D8にはユーザーフォームで入力した品目名が出力されており、それに呼応するIDがデータ欄!C9:D28に記載されており、
E8にIDを出力したいと考えています。
ヒントでも頂ければ幸甚に存じます。
0021デフォルトの名無しさん
2017/01/07(土) 00:25:21.43ID:LrFag0bmvlookup関数でエラーが出てるの?
0022デフォルトの名無しさん
2017/01/07(土) 00:30:28.46ID:2J+LIFNT途中でエラーが出て、アレっ?となる罠付きだけどな。
0023デフォルトの名無しさん
2017/01/07(土) 00:37:52.01ID:2J+LIFNTCells(1,1).Value="=VLOOKUP(D8,データ欄!$C$9:$D$28,2,FALSE)"なのか?
WorksheetFunction.VLookupなのか?
実行時エラーなのか?
#N/Aなのか?
何となく、余計な改行コードが入っているとか、
数字の123と文字の123を比較してるとか、
そんな罠のような気がするけど。
0024デフォルトの名無しさん
2017/01/07(土) 00:48:37.10ID:CI9p857v面倒くさいからこれ貼っとくわ
http://www.relief.jp/itnote/archives/excel-vba-error-trap-vlookup-function.php
0025デフォルトの名無しさん
2017/01/07(土) 00:49:41.86ID:TOrGuStJ事実だけを伝えた方がいい時もある
エラーと言っているが画面に表示される文字列やダイアログは何なのか
どんなタイミングで表示されるのか
自分が書いたコードはどんなものか
0026デフォルトの名無しさん
2017/01/07(土) 00:51:23.73ID:LrFag0bm0027デフォルトの名無しさん
2017/01/07(土) 00:55:21.10ID:CI9p857v0028デフォルトの名無しさん
2017/01/07(土) 09:02:21.49ID:Xo1hV6SK作り終わるってのはテストも込みでだぞ
0029デフォルトの名無しさん
2017/01/07(土) 23:07:08.30ID:so7B4l6a0030デフォルトの名無しさん
2017/01/07(土) 23:55:04.69ID:5WVocSaLとあるセルに入力するとvbaが実行するようにしてるのですが
コードに間違いがあるとエラーがでて終了を押すとまたセルに入力してもvbaが実行されなくなります (MsgBoxで確認してます)
実行メニューのリセットを押しても同じです
ファイルを開き直してもダメでexcelを再起動するとまた動くのですが再起動せずにする方法ってありますか?
excel 2016 win7です
003130
2017/01/08(日) 00:49:37.29ID:r1ASQ1zZボタンからsubの実行は動くようです
0032デフォルトの名無しさん
2017/01/08(日) 00:52:16.58ID:mMTwBd0eもしかして
Application.EnableEvents = False
とかしてて その後 実行時エラーが出て Trueに戻せてないとかじゃね?
On Error
でエラートラップして Trueに戻すようにしないと
0033デフォルトの名無しさん
2017/01/08(日) 12:37:54.44ID:C9GVPqMv0034デフォルトの名無しさん
2017/01/08(日) 14:23:39.68ID:aANViJyGまさにこれだが
デバッグモードにして止めてみろって
003530
2017/01/08(日) 14:39:47.53ID:r1ASQ1zZそれが原因だったようです
ありがとうございますm(__)m
>>33-34
デバックモードよく分かってません
勉強してみます
0036デフォルトの名無しさん
2017/01/08(日) 21:58:52.89ID:LSCp0tLPA行(A5〜Aずっと下まで)に「食物」が入力されていると仮定して、
B行が一行上の値と違う場合、
一行上に行を挿入して、その行に「果物」と入れたいです。
B行に入る値
・みかん
・バナナ
Sub 入力
一番上 = 5
一番下 = Cells(Row.Count,1).End(xlup).Row
For Cnt = 一番上 To 一番下
If Cells(Cnt,1)="りんご"
If Cells(Cnt-1,2)<> cells(Cnt,2) then
If cells(Cnt,2)="みかん" or Cells (Cnt, 2) ="バナナ" Then
Range(Cells(Cnt,1),Cells(Cnt,2)).Insert
End If
End If
End If
Next Cnt
本来は「みかん」と「バナナ」をまとめて、その上に「果物」の見出しをつけたいのに、
このコードだと「みかん」と「バナナ」のそれぞれ一行上に行が入ってしまいます。
どうしたら、まとめて一行だけ挿入することが出来るでしょうか?
0037デフォルトの名無しさん
2017/01/08(日) 22:25:17.31ID:KINgQhrq俺が困るので先に言っとく
『行』とは横のことを指す(左の数字)
縦を指すときは『列』と呼ぶ(上の英字)
そこをふまえて
>B列が1行上の値と違う場合、1行上に行を挿入して、その行に「果物」と入れたい
と言う条件と
>「みかん」と「バナナ」のそれぞれ1行上に行が入ってしまいます。
と言う結果は整合性のある状態なので問題はないと思う
もしも望む結果ではないのであればまず
>B列が1行上の値と違う場合、
を見直すことが必要
やりたい内容を鑑みれば
B列に入力があり、1行上の値が空白である場合、
と変えればいいと思う
0038デフォルトの名無しさん
2017/01/08(日) 22:42:31.86ID:LSCp0tLPそうですね、表現の仕方が間違っておりました。
フォーマットがもう決まってしまっているので、これで何とかしたいんですよね・・・。
どうしても、「みかん」「バナナ」をまとめて、一行上に行を挿入したいのですが。
今、思いついたのは、「みかん」「バナナ」にそれぞれ行が入ってしまうことは承知で、
「果物_01」「果物_02」と連番になるように設定して(やり方は分かっていないです)
それで_02の行は削除するというifを組んで、
さらに「果物_01」の行は「01」の部分を省くコードを書けばいいかな、と思ったりもしますが、
効率が悪いでしょうか?(やり方は分かっていないです、ただ思いつき)
0039デフォルトの名無しさん
2017/01/08(日) 22:49:26.11ID:KINgQhrq条件を変えればいいと思う
A列(A5〜Aずっと下まで)に「食物」が入力されていると仮定して、
B列が1行上の値と違う場合、
1行上に行を挿入して、その行に「果物」と入れたい
↓
A行(A5〜Aずっと下まで)に「食物」が入力されていると仮定して、
B列に入力があり、1行上の値が空白である場合、
1行上に行を挿入して、その行に「果物」と入れたい
0040デフォルトの名無しさん
2017/01/08(日) 23:15:02.67ID:LSCp0tLPなるほど、そういう発想もありますね。
でもそうなると、どういうコードになるのでしょうか??(・・?)
0041デフォルトの名無しさん
2017/01/09(月) 00:15:41.73ID:t+szxcoeちょっと日本語が意味わからないからアドバイス出来ないわ…
0042デフォルトの名無しさん
2017/01/09(月) 00:55:08.08ID:4/AW5UycA列は全て 「食物」が入力されているのよね
で
B列にどのように入ってるの?
>B行に入る値
>・みかん
>・バナナ
これ以外は無い(すなわち空セル)って事?
コード見ると「りんご」 ってあるみたいだけど???
んで どのような結果を お望み?
0043デフォルトの名無しさん
2017/01/09(月) 00:58:47.84ID:5IQR8Haa分類1
商品1
商品2
分類2
商品3
商品4
みたいなフォーマットなの?
もしそうなら、それは神エクセルだから、
>フォーマットがもう決まってしまっているので
そこをどうにかして、こう直したほうがいいと思うけど。
分類名 商品名
分類1 商品1
分類2 商品2
0044デフォルトの名無しさん
2017/01/09(月) 01:00:35.84ID:5IQR8Haa分類名 商品名
分類1 商品1
分類1 商品2
分類2 商品3
分類2 商品4
0045デフォルトの名無しさん
2017/01/09(月) 02:56:04.77ID:JlqgPD3/コマンドボタンを1回クリックするごとにラベルに100ごと加算される物を
作りたいのですが、↓だと、あたりまえですが1度クリックしかできません。
Private Sub CommandButton1_Click()
x = 100
Label1.Caption = x
End Sub
0046デフォルトの名無しさん
2017/01/09(月) 03:13:17.25ID:4/AW5Uycコマンドボタンとラベルは ユーザフォーム上なの? シート上なの?
どちらでも良い方法として
ラベルのプロパティ開いて Captionを 0 にしておく
その上で
Private Sub CommandButton1_Click()
Label1.Caption = Label1.Caption + 100
End Sub
0047デフォルトの名無しさん
2017/01/09(月) 03:24:27.93ID:JlqgPD3/ユーザーフォーム上です!ありがとうございました、無事できました!
0048デフォルトの名無しさん
2017/01/09(月) 04:07:15.85ID:JlqgPD3/45の続きで、ラベル1の値ーラベル2の値=差の値をラベル3に表示する
計算機をユーザーフォーム上に作りたいと思っています。
しかし以下ではエラー「一致する型がありません」とでます。
なぜなのでしょうか(T_T)
Private Sub CommandButton3_Click()
Label1.Caption = x '投入した金額
Label2.Caption = y '選択した金額
k = x - y
Label3.Caption = k
End Sub
-----------------
Private Sub CommandButton1_Click()
Label1.Caption = Label1.Caption + 100 ←ここにエラ―がでる
End Sub
------------------
Private Sub CommandButton2_Click()
Label2.Caption = Label2.Caption + 50
End Sub
0049デフォルトの名無しさん
2017/01/09(月) 04:23:14.16ID:4/AW5Uyc>>46 を良く嫁
以上
0050デフォルトの名無しさん
2017/01/09(月) 10:17:57.42ID:EPA1tS/m引き算するとこのx,yの代入逆だろ
x=ラベルキャプションってしないとなんも価入らんぞ
あとちゃんと変数は宣言してる?
0051デフォルトの名無しさん
2017/01/09(月) 10:41:01.31ID:HU0Vv46x>ラベルのプロパティ開いて Captionを 0 にしておく
は前提として、プロパティを直接の演算の対象にするとダメなことはまれに経験したことがある
理由はわからないけど
そういう時は、変数をかまして回避した。たとえば、
Private Sub CommandButton1_Click()
Dim label1_c As Integer
label1_c = Label1.Caption
label1_c = label1_c + 100
Label1.Caption = label1_c
End Sub
0052デフォルトの名無しさん
2017/01/09(月) 13:48:59.41ID:O0/XMIqD一旦シート1の表の値を変数ATAI(i)に入れて、シート2や3にコピーしてます。
また別の方法で直でシート1.COPY シート2でもコピーしてみました。
両方ともコピーするのが2万個ぐらいあるのですが、処理に3分ぐらいかかります。
もっと早くする方法はありますか?
0053デフォルトの名無しさん
2017/01/09(月) 13:50:27.27ID:JSUf7hDgエラーで中断したら再計算しないけどな
0054デフォルトの名無しさん
2017/01/09(月) 14:36:04.75ID:SVvcq0NiWSだとメソッドまたはデータメンバーが見つかりませんになってしまいます
wsの方か厳密のような気がするのですがObjectで正解なんでしょうか?
ThisWorkbook
Dim ws As Worksheet ' Objectにすると成功
Set ws = Sheets("Sheet1")
Call ws.a() ' エラー
Sheet1
Sub a()
End Sub
0055デフォルトの名無しさん
2017/01/09(月) 14:36:23.83ID:EPA1tS/mDim rng as Range
set rng = Range(元データ開始セル,元データ終了セル)
Range(貼り付け先開始セル,貼り付け先終了セル) = rng
って感じでやると早くない?
もしかしたらvariant型の変数にした方が早いかもしれんけど
OfficeTANAKAに高速化テクニックって感じで載ってるよ
0056デフォルトの名無しさん
2017/01/09(月) 14:37:11.58ID:EPA1tS/mあのな?「作り終わったら」ってどういう意味かわかるか?
0057デフォルトの名無しさん
2017/01/09(月) 14:51:56.79ID:4FVlGxEy目的に合致してれば
問題ないです
0058デフォルトの名無しさん
2017/01/09(月) 15:00:52.77ID:cjVtQucRSheet1.NameがSheet1じゃないのかも
005954
2017/01/09(月) 15:30:22.93ID:SVvcq0NiWorkbook_SheetChange(ByVal ws As Object, ...
Call ws.a() ' エラー
Call Sheets(ws.Name).a() ' 成功
となり訳が分かりません...
>>57
理解できてないとなにか気持ち悪いです
>>58
同じにしてあります;;
セルやらシートがあるのでvbaってjsやpyより難しい気がします
basicの構文も癖があるし・・
0060デフォルトの名無しさん
2017/01/09(月) 16:49:38.66ID:dWF3ZE3Bwww
0061デフォルトの名無しさん
2017/01/09(月) 16:53:01.88ID:6xa3UP1L後者だと参照渡しになりませんでしたが。
0062デフォルトの名無しさん
2017/01/09(月) 16:53:39.75ID:I9s0ZByk他の人が追試出来るように端折らないコード乗せて。
0063デフォルトの名無しさん
2017/01/09(月) 16:57:16.33ID:6xa3UP1L0064デフォルトの名無しさん
2017/01/09(月) 17:21:48.98ID:EPA1tS/m解決したならそれをのせろや
0065デフォルトの名無しさん
2017/01/09(月) 17:22:57.78ID:SVvcq0Ni新規の空ファイルで
ThisWorkbook
Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)
Call sh.test
'Call Sheets(sh.Name).test
End Sub
Sheet1
Sub test()
MsgBox "テスト"
End Sub
0066デフォルトの名無しさん
2017/01/09(月) 18:15:14.29ID:Z/GXP5pvsh.Name="Sheet1"
を確認しないとダメな気がする
0067デフォルトの名無しさん
2017/01/09(月) 18:21:35.53ID:Z/GXP5pv動的にイベントが発生するまでシートを確定できないからコンパイルでエラーになるみたいだよ
0068デフォルトの名無しさん
2017/01/09(月) 18:23:08.68ID:Z/GXP5pv0069デフォルトの名無しさん
2017/01/09(月) 18:39:16.88ID:SVvcq0Niありがとうございますm(__)m
VBAはコンパイラだったのですね
納得しました
0070デフォルトの名無しさん
2017/01/09(月) 18:56:01.43ID:jLw81RF+厳密にいうと参照渡しになっている。
変数aをカッコで囲んで(a)とすると、aのコピーが一時オブジェクトとして作られ、それがプロシージャに渡されるので、
元の変数aそのものはプロシージャに渡らない。
プロシージャ a
と
Call プロシージャ(a)
が等価で、
プロシージャ (a)
は
Call プロシージャ((a))
と等価になる
0071デフォルトの名無しさん
2017/01/09(月) 19:32:58.81ID:6xa3UP1Lカッコにそういう意味があったとは・・・!
わかりやすかったです、ありがとうございました。
0072デフォルトの名無しさん
2017/01/09(月) 22:18:09.21ID:vYvrwg8zえっ
0073デフォルトの名無しさん
2017/01/09(月) 22:32:30.71ID:o7+xqhMd分かりづらく失礼しました。
途中のりんごは不要です。
また、B列には他の食べ物が入りますが、ここでは果物に分類されないので、省略しました。
Sub 入力
一番上 = 5
一番下 = Cells(Row.Count,1).End(xlup).Row
For Cnt = 一番上 To 一番下
If Cells(Cnt,1)="食物"
If Cells(Cnt-1,2)<> cells(Cnt,2) then
If cells(Cnt,2)="みかん" or Cells (Cnt, 2) ="バナナ" Then
Range(Cells(Cnt,1),Cells(Cnt,2)).Insert
End If
End If
End If
Next Cnt
0074デフォルトの名無しさん
2017/01/09(月) 22:32:55.53ID:o7+xqhMd果物
食物バナナ
食物みかん
食物その他(仮)
・
・
・
としたいわけです。ところが、自分の作ったシートだと
果物
食物バナナ
果物
食物みかん
食物
・
・
となってしまうわけです。これで分かりやすくなったでしょうか・・・
0075デフォルトの名無しさん
2017/01/09(月) 22:40:49.82ID:LQfxW/qY0076デフォルトの名無しさん
2017/01/09(月) 22:45:04.08ID:O0/XMIqD手動でセルに関数貼りつけたほうが早かったです・・・。
0077デフォルトの名無しさん
2017/01/09(月) 23:29:23.35ID:4/AW5Uycやりたい事こんな感じ?
※なお 区別する種類が多いとこの手法は結構大変なので
考え直さないとだけど
Sub 入力()
一番上 = 5
一番下 = Cells(Rows.Count, 1).End(xlUp).Row
'下から上に処理してく
For cnt = 一番下 To 一番上 Step -1
'cnt行の品名
品名1 = Cells(cnt, 2).Value
'cnt行の一つ上の品名
If cnt <> 一番上 Then
品名2 = Cells(cnt - 1, 2).Value
Else
品名2 = ""
End If
'行挿入
If 品名1 = "みかん" Or 品名1 = "バナナ" Then
If 品名2 <> "みかん" And 品名2 <> "バナナ" Then
Range(Cells(cnt, 1), Cells(cnt, 2)).Insert
Cells(cnt, 2) = "果物"
End If
End If
Next
End Sub
0078デフォルトの名無しさん
2017/01/09(月) 23:32:51.18ID:cjVtQucRメニューにコンパイルってあるけど
0079デフォルトの名無しさん
2017/01/09(月) 23:43:50.55ID:dVuv1+muんー
二万件あっても直接レンジでやり取りすればそんな時間かからんと思うけどな
まあいいや、解決したなら乙だ
0080デフォルトの名無しさん
2017/01/09(月) 23:47:23.09ID:SFPxoHKZ本当はVBA必要ないのに、
神エクセルを作ることによって、
VBAが必要になってしまっているのではないか?
果物・・・食べ物の種類
バナナ・・・果物
みかん・・・果物
項目以外で、違うものを同じ列に入れる?
0081デフォルトの名無しさん
2017/01/10(火) 00:09:16.68ID:hjeg5IZ90082デフォルトの名無しさん
2017/01/10(火) 10:38:11.72ID:yHxqwlUe大変遅くなりました。
>「元の画像より少し小さいシェイプを作成して取得する」
はなかなかの妙案だと思いましたが、関数化してループさせた場合処理速度に問題があったので、
既存のプロパティを自力で補正するように書き換えてみました。
Excelは左上をセルの左上に合わせて配置しても、画像の右下のグリップで拡大した場合、
低確率で.Topと.Leftの値が微妙に変化する(たとえば C3に置いた写真の.Top=37.5が37.4999...に変わってしまう。)
ようなので、何パターンか検証した結果、小数点以下第三位を四捨五入で正確に出る事がわかりました。
手動配置している場合に余裕を持たせられるようデフォルト値付きの省略可能引数にしています。
Sub TestGetShapeToRange()
Dim SP As Shape
For Each SP In Selection.Parent.Shapes
If SP.Name = Selection.Name Then Exit For
Next
Range(GetTopLeftCell(SP), GetBottomRightCell(SP)).Select
End Sub
長すぎと怒られたので 次レスへ
0083デフォルトの名無しさん
2017/01/10(火) 10:38:44.28ID:yHxqwlUe'Shape.TopLeftCellの誤差補正後の左上セルを取得する関数
Public Function GetTopLeftCell(SP As Shape, Optional num_digits As Integer = 2) As Range
Set GetTopLeftCell = SP.TopLeftCell
If GetTopLeftCell.Offset(1).Top <= Round(SP.Top, num_digits) Then
Set GetTopLeftCell = GetTopLeftCell.Offset(1)
End If
If GetTopLeftCell.Offset(, 1).Left <= Round(SP.Left, num_digits) Then
Set GetTopLeftCell = GetTopLeftCell.Offset(, 1)
End If
End Function
'Shape.BottomRightCellの誤差補正後の右下セルを取得する関数
Public Function GetBottomRightCell(SP As Shape, Optional num_digits As Integer = 2) As Range
Set GetBottomRightCell = SP.BottomRightCell
If GetBottomRightCell.Top >= Round(SP.Top + SP.Height, num_digits) Then
Set GetBottomRightCell = GetBottomRightCell.Offset(-1)
End If
If GetBottomRightCell.Left >= Round(SP.Left + SP.Width, num_digits) Then
Set GetBottomRightCell = GetBottomRightCell.Offset(, -1)
End If
End Function
以上、ご報告まで。
0084デフォルトの名無しさん
2017/01/10(火) 12:02:57.55ID:yHxqwlUe以下のようなマクロがあります。
1.非モーダルのユーザーフォーム(fm)が常駐
2.ユーザーが任意で複数の画像を選択
3.fm上のボタンをユーザーがクリックして下記のような処理を実行
For each obj in Selection
obj.cut
ActiveSheet.PasteSpecial Format:="図 (JPEG)"
Next
すると、最後にPasteしたShapeを選択した状態でマクロが終了します。
ESCを押して選択を解除するような操作をVBAで再現するにはどうしたら良いのでしょうか。
・マクロの記録では、ESCでShapeの解除は記録されませんでした。
・Application.SendKeys "{ESC}"を試してみたのですが、反応がありませんでした。
・ユーザーフォームにフォーカスが取られているのかと思いActiveWorkbook.ActivateやActiveWindow.Activateを入れたのですが無反応でした。
強引な解決策を考えましたが、もっとスマートな方法が無いかと探しています。
・終了後に適当なRangeをSelectしてからScrollRow/ScrollColumnして元の位置に戻す。
・シートのSelectionイベントで直前までに選択されたRangeを保持する。
ご教示のほどよろしくお願い致します。
0085デフォルトの名無しさん
2017/01/10(火) 15:45:40.53ID:8VGVrhFD君の思う スマートな方法が どんなものだかは分らんが
どこかのセルを選択するのが一番簡単だと思う
適当なセルだとスクロールしてしまうのがイヤなら
・選択されてるShapeの右上のセルを選択
・画面上の左上のセルを選択
とかでいいんじゃね?
008685
2017/01/10(火) 15:47:43.23ID:8VGVrhFD× ・選択されてるShapeの右上のセルを選択
○ ・選択されてるShapeの左上のセルを選択
0087デフォルトの名無しさん
2017/01/10(火) 17:40:05.82ID:yHxqwlUeとりあえずは、表示画面の左上セルをSelectするようにしたいと思います。
>スマートな方法
いわゆるobj.Unselect()メソッドとか、obj.Select(false)のような選択解除専用の機能は無いか。という事です。
Excel VBAって思わぬオブジェクトに実装されていたりするので・・・
0088デフォルトの名無しさん
2017/01/11(水) 08:57:05.13ID:J0hUcFsW結局は別のものを選択してるよね
0089デフォルトの名無しさん
2017/01/11(水) 09:00:21.43ID:v+irSj+yプロパティ的なもんはオブジェクトブラウザかなんかで調べれば出てくるんじゃないの
0090デフォルトの名無しさん
2017/01/11(水) 12:03:53.06ID:tc1gJPs0A1に日付が2017/01/11と入ってる場合
そのセルを引用したらスラッシュも入ってしまい保存の時にいちいち消すのに困っています。
保存の時にだけスラッシュを消す方法有りませんか?
0091デフォルトの名無しさん
2017/01/11(水) 12:12:47.07ID:p4WB0UzKformat
0092デフォルトの名無しさん
2017/01/11(水) 12:31:15.82ID:tc1gJPs0このような形でいいのでしょうか?
0093デフォルトの名無しさん
2017/01/11(水) 12:34:16.38ID:I7PY9KYrExcelVBAのマクロを保存してた「PERSONAL.XLSB」が使えなくなりました。
シンクライアントでは「PERSONAL.XLSB」に相当する機能を使用するにはどうしますか?
あとこれが本題なのですが
OutlookとWordも、それらのVBAをデフォルト的個人ファイルに保存して高頻度で使用していました。
特にOutlookのVBAでは便利なマクロを作っていました。
シンクライアントでもそれらの機能を使用するにはどうしますか?
0094デフォルトの名無しさん
2017/01/11(水) 12:35:59.27ID:p4WB0UzK0095デフォルトの名無しさん
2017/01/11(水) 12:38:17.27ID:tc1gJPs0ご丁寧にありがとうございます!
0096デフォルトの名無しさん
2017/01/11(水) 12:48:03.28ID:p4WB0UzK単純に移行すれば使えると思う
以前使ってたpersonal.xlsbを所定の位置に配置すればできるはず
0097デフォルトの名無しさん
2017/01/11(水) 12:50:26.58ID:I7PY9KYrシンクライアントでは普通の方法ではCドライブが見えないんです。
別の方法で見つけてそこに入れても、次の日にPCを起動したときにそのファイルは消えてしまっているから
わざわざファイルを移動する方法では無駄になってしまうんです。毎日する必要になるから面倒で。
0098デフォルトの名無しさん
2017/01/11(水) 12:53:38.45ID:xxQxfc5N会社のシステム担当者に聞けばいいよ
0099デフォルトの名無しさん
2017/01/11(水) 13:08:46.29ID:uU4tfKci自分なりのカスタマイズはあきらめるしかない場合がほとんど
0100デフォルトの名無しさん
2017/01/11(水) 13:08:59.59ID:I7PY9KYrどこにその部署があるかわからないし
勝手にツール作らないでくださいといわれてそれを禁止されるリスクもあるから
自分の力で解決したいのですが。
0101デフォルトの名無しさん
2017/01/11(水) 13:15:26.49ID:I7PY9KYrどうすればシンクライアントでもスタートアップ機能を使えるでしょうか?
0102デフォルトの名無しさん
2017/01/11(水) 13:37:35.00ID:f6yusNGM管理者側で許可設定してもらわない限り、シンクラでカスタマイズは無理
そして許可はまず下りない
あきらめろ
0103デフォルトの名無しさん
2017/01/11(水) 13:38:29.71ID:uU4tfKciスレチ
■ このスレッドは過去ログ倉庫に格納されています