[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 10/09 14:54 / Filesize : 339 KB / Number-of Response : 1038
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part51



1 名前:デフォルトの名無しさん [2017/11/08(水) 11:26:30.13 ID:+KUB1/9hd.net]

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※関連スレ
VBAなんでも質問スレ Part2
mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/

※前スレ
Excel VBA 質問スレ Part50
mevius.2ch.net/test/read.cgi/tech/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)


653 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 19:51:30.63 ID:pW3jV0rpa.net]
>>635
天才の人は苦にしないだけでちゃんと道は通ってるよ

654 名前:デフォルトの名無しさん [2017/12/18(月) 19:54:37.06 ID:/veb4c2e0.net]
>>636
何を言いたいのかよくわからんがそもそも俺が言ってるのは天才のことじゃない
単にプログラムができる奴とできない奴の話なんだが

655 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 19:57:32.60 ID:pW3jV0rpa.net]
>>637
iqないとダメなのはプログラムに限らんし
まあスレチだから退散するわ

656 名前:デフォルトの名無しさん [2017/12/18(月) 20:01:42.20 ID:/veb4c2e0.net]
>>638
いやだからIQとかの話じゃないってば
目の前の問題をありのままに受け入れる事ができる奴と
既に自分の中に構築された知識に当てはめないと解釈できない奴の違いだって

657 名前:デフォルトの名無しさん mailto:sage [2017/12/18(月) 23:11:06.58 ID:aXpCltYZ0.net]
>>634
仮に採用されて皆がPython触るようになったら、今度はPython(笑)って扱いされる未来が見えるわ。
格好つけだけでやってる奴らが抜けて、AIとか作ってる真っ当なのが風評被害を受けそう。

言語は統一するよりも、それを扱うユーザー層毎に分けた方がいい。

658 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 12:28:53.96 ID:/mb664F4a.net]
>>618
俺も似たようなの見たことがある。
でも引きずるような問題じゃ無かったと思う。
Excel再起動かPC再起動で直るんじゃね?

659 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 12:37:10.24 ID:pfZPHd/La.net]
>>635
逆だと思うが。
未知の問題に対しての解決能力は上げることができる。
楽なやり方を選ぶ奴は上げられないだけ。
厳密には未知な問題といっても既知の問題と全く違うわけじゃない。

660 名前:デフォルトの名無しさん [2017/12/19(火) 16:48:29.82 ID:mNLh8c+i0.net]
ここのやつらがあんまジャバジャバいうから引っ張り出して着たわ

とりあえずコードは実行せずにパラ読みしようと思う

https://i.imgur.com/peDAurF.jpg

661 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 17:01:17.86 ID:Bngslooy0.net]
>>643
「わー、ロレックス持ってるなんてすごーい!」
「え?こんなの普



662 名前:ハだよ。持ってないとかwww」

みたいな展開になる事を期待してるんだろうけど腕時計の入れ方が無理やり過ぎて笑いしか出てこないw
本は中古屋で買ったみたいだし、あまりにもちぐはぐ過ぎてむしろ格を下げてるようにしか見えないんだが。
[]
[ここ壊れてます]

663 名前:デフォルトの名無しさん [2017/12/19(火) 18:14:51.58 ID:J+VWEpvK0.net]
>>642
うんだから最初に言ったんだけど自己評価だとそう感じるんだってば

664 名前:デフォルトの名無しさん [2017/12/19(火) 19:02:39.42 ID:mNLh8c+i0.net]
JAVAの本でわかったこと

変数の宣言と同時に値を入れることを初期化という
変数の値が変わらないことを定数という

いま10ページ目だけどこんくらいだわ

665 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 19:57:29.94 ID:9tP52mqX0.net]
>>646
>変数の値が変わらないことを定数という

これはちょっと違うのでは?

666 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 20:25:43.13 ID:fLKwjLgZa.net]
>>645
お前の自己評価がそう感じてるだけだろw
何か自分はプログラム書ける気になってるようだけどw

667 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 21:14:28.27 ID:4AWSTK/ra.net]
変数の初期かもなんかむずむずする理解だな

668 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 21:15:04.92 ID:4AWSTK/ra.net]
あ、でも彼はジャワティーの話をしてるのか
ならわからんでもない

669 名前:デフォルトの名無しさん [2017/12/19(火) 21:26:16.08 ID:mNLh8c+i0.net]
javaのパスが通らなくて実行できない
助けてくれ

670 名前:デフォルトの名無しさん mailto:sage [2017/12/19(火) 23:45:33.30 ID:jfHXMkXp0.net]
Java は環境構築が難しいから、初心者には無理

paiza.IO, codepad などのサイトで、ブラウザから実行しろ

671 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 00:20:41.41 ID:USwfdD4Y0.net]
別にJavaが難しいと感じたことはないな。
すっげえ昔にかじっただけだから今となっては初心者以下だけど。
いや、当時も初心者だったけど。



672 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 00:28:51.85 ID:USwfdD4Y0.net]
コンパイラもJavaで出来てるからJava実行環境でコンパイラ動かして、そのコンパイラへの引数にエディタで編集中のテキストを一時ファイルにしたものを渡してたな。
そのエディタもJavaで誰かが作ったものを機能拡張したやつだったな。

673 名前:デフォルトの名無しさん [2017/12/20(水) 00:40:50.45 ID:xfg3gakwa.net]
コマンドラインが敷居高いならeclipseでやれ
敷居高いつっても環境変数設定してそこにパス通すだけだがな

674 名前:デフォルトの名無しさん [2017/12/20(水) 01:00:50.98 ID:sohN4awK0.net]
javaって効率悪すぎだろ
テキストエディタで編集

名前つけて保存

コマンドプロンプトでコード入力

実行

どんだけ時間かかるんだよ

675 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 08:24:00.28 ID:TZHE5kKsa.net]
いやeclipse使えよ

676 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 09:28:33.38 ID:FRuTBLwYp.net]
これ以上はスレ違いなのでJavaスレでどうぞ

677 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 09:36:49.97 ID:GPFg9WZwx.net]
eclipseも知らないで手動でコンパイルしながらブチキレてるの想像してワロタ
道は遠いね

678 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 12:25:53.38 ID:Vi8ViNgtd.net]
スレチ

679 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 12:41:32.07 ID:/dU/ndoRa.net]
お前ら良かったな
EXCELでPythonが使えるようになるかも知れないんだって?
あれはObject指向の流れを組む関数型を目指しているところの言語っていうからやりがいはあるよね

俺もVB.NetやC#はやったけど
EXCELに載ることが確定したらこれからPython覚えるわ
まぁ構造化言語からObject指向型言語に移行したとき
めちゃくちゃ苦労したけど
今回も苦労するんだろうなぁ

680 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 13:38:58.93 ID:/fbzm/vOa.net]
Pythonはさらっと概要見たぐらいだけど面白そうだね
まあexcelにのらなくても勉強して損にはならんだろうな

681 名前:デフォルトの名無しさん [2017/12/20(水) 15:31:22.90 ID:EAMpcVD20.net]
必要ないもん勉強したって時間のムダだっつーの
真のエ



682 名前:Nセルマクラーだったらマクロ書くのにパイソンしか使えなくなった時に必死でググれ []
[ここ壊れてます]

683 名前:デフォルトの名無しさん [2017/12/20(水) 16:07:26.91 ID:/h7jUJynd.net]
今のままでも関数型で出来るらしいが
https://qiita.com/matumoto_onga/items/7adfd4cf48288c477901

684 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 18:29:06.12 ID:khkAeR460.net]
Pythonはオブジェクト指向も関数型も全部後付けって感じでイケてねえ
F#にしとけって
でもこんなのはプログラマ以外が触るものだからしょうがないのかもな

685 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 19:00:00.85 ID:sxNo8wqUa.net]
>>665
F#ってまだ生きてんのか!

686 名前:デフォルトの名無しさん [2017/12/20(水) 19:51:25.83 ID:7WhairgWd.net]
生きてるし、活発に使われてるよ
ソースはない

687 名前:デフォルトの名無しさん mailto:sage [2017/12/20(水) 20:52:44.38 ID:EAMpcVD20.net]
ソースはないソースはよ

688 名前:デフォルトの名無しさん [2017/12/21(木) 23:06:47.24 ID:1PuX0k7mM.net]
100列ぐらい続く計算エクセルがある
足したり引いたりするだけのエクセル。
酷くね?VBAにできないものか

689 名前:デフォルトの名無しさん mailto:sage [2017/12/22(金) 02:00:09.18 ID:T3zOnX2zx.net]
>>669
計算エクセルっていう表現が意味不明だが要は計算用のワークシートのことか?
大抵の場合、ワークシート関数とテーブル機能を組み合わせて何とかする方がVBA使うより楽だぞ
車輪の再発明をしてもしょうがないからな

690 名前:デフォルトの名無しさん mailto:sage [2017/12/22(金) 04:21:53.41 ID:0EXQoFbJ0.net]
質問です。
Excel側からVBE上の指定のプロシージャ記述欄にジャンプする動作をVBAで記述できる
でしょうか?
やり方がわからずとりあえずSendKeysを組み合わせて動作するようになったのですが
不慮の事故が起きそうで怖いです。
VBEのオブジェクトモデルに沿ったアクセス方法があれば教えていただけないでしょうか。

691 名前:デフォルトの名無しさん [2017/12/22(金) 07:49:35.63 ID:BCzwPGy5d.net]
>>671
VBE上でカーソルの位置をコントロールするってこと?



692 名前:デフォルトの名無しさん mailto:sage [2017/12/22(金) 11:50:10.85 ID:7Q1lZFEo0.net]
>>672
メンテのためにActiveBookから全Procのリストを新規Sheetに出力する
Procedureを用意したのですが、Proc名からVBE上の該当Procにジャンプ
したく、右ClickEventにジャンプ機能を割り当てました。
正しいアクセス方法がわからないので、ほぼSendKesyのみで記述している
のですが、状況により意図しない挙動をします。

VBEを開く動作は "^{F11}"の代わりに
 Application.CommandBars.FindControl(ID:=1695).Execute
が使えそうなことはわかったのですが、、、
VBE上で1つもModuleが開かれていなかったり、開かれているModuleと、ツリー
側の選択されているModuleが異なったりすると、"^F"が効かないようです。
FrontEndからではなく、ObjectModelに沿ったBackEndからの操作が
知りたいのですが、うまく情報を見つけられないところです。

693 名前:デフォルトの名無しさん mailto:sage [2017/12/22(金) 12:58:52.19 ID:7Q1lZFEo0.net]
>>671
自己解決しました。
キーワードを英語に切り替えてGGったら、StackOverFlowですぐ見つかりました。
.CodePane.GetSelection
.CodePane.SetSelection
あたりでなんとかなりそうです。お騒がせしました。

694 名前:デフォルトの名無しさん mailto:sage [2017/12/22(金) 17:40:48.08 ID:3J82DkVga.net]
VBAやりはじめて三年ぐらいだけど、For Eachで普通の配列もループできるの今日知ったわ
コレクションだけだと思ってた

695 名前:デフォルトの名無しさん [2017/12/22(金) 18:05:37.66 ID:/KqbyaeQd.net]
>>675
値の取得だけで設定はできないけどねー

696 名前:デフォルトの名無しさん mailto:sage [2017/12/22(金) 18:16:05.21 ID:3J82DkVga.net]
>>676
クラスの扱いが大分変わるのよ
わざわざイテレータ自作してたわ

697 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 00:05:26.91 ID:/nzAEvVba.net]
>>674
できるんだけどセキュリティ的に問題だからお勧めしない。
.netで書いた方が良いぞ。
でもVBEを操作するコードが書ければ、.net上でも殆ど同じコードでいけるから勉強しとくと良いかな。 []
[ここ壊れてます]

699 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 06:34:44.47 ID:F3cHZlpp0.net]
sheet1に置いたボタンを押してからsheet1内のセルをクリックすると、クリックしたセルに「ここ」
とはいるようにしたいです。実際作りたいものはもっと複雑ですが、とりあえず。
そこで、sheet1のシートモジュールに以下の記述をしました
しかし、どうやら前回クリックしていた場所を覚えていて、その場所に「ここ」と入ってしまいます
解決法はありますか?

Private Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Integer

Private Sub CommandButton1_Click()
Do
If GetAsyncKeyState(VK_LBUTTON) Then
ActiveCell.Value = "ここ"
Exit Do
End If
Loop
End Sub

700 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 06:43:21.92 ID:F3cHZlpp0.net]
>>679で書き忘れ
標準モジュールの宣言部に
Public Const VK_LBUTTON = &H1
の記述もしてあります。

701 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 07:46:11.28 ID:8SavP0Th0.net]
>>679
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then Target.Value = "ここ"
End Sub

クリックした場所に入れるだけならSheet1モジュールにこれで済むけど、コルーチン処理が必要というなら分からん。
いずれにしてもActiveCellとかActiveSheetとかは避けて設計すべき。



702 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 07:56:20.90 ID:F3cHZlpp0.net]
>>681
自分もググってたどりついた先がそれだったんですよね

でも常に発動してる状態だとやっぱり困るんですよ
一応application.enableevent を使って停止しておくこともできるようなので、
通常は停止しておくことも考えてはいます
設置したボタンを押したときだけ機能するようにしておけばいいのかな、と。
Worksheet_SelectionChange使う以外方法がなければそうするしかないですが
無効にしてる間はイベントが一切反応しなくなるという事なので、
イベント付きの他のブックを併用するようなケース等で問題が起きそうで迷ってます

703 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 08:00:18.36 ID:8SavP0Th0.net]
>>682
なら

If ToggleButton1.Value Then

とか加えておけばいいだけでは?

704 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 08:11:12.55 ID:F3cHZlpp0.net]
>>683
お・・これはいけそうです
こういう使い方があるんですね・・・
作業を先に進められそうです
ありがとうございました

705 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 10:35:36.95 ID:oVsH3Gmz0.net]
フォームコントロールボタンの文字の色を変えたいんだけど
セレクトしない方法はないのですか?

Sub test01()
 n = Worksheets("Sheet1").Shapes("Button 1").Name
 Worksheets("Sheet1").Shapes(n).Select
 Selection.Font.ColorIndex = 3
End Sub

706 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 10:51:51.14 ID:YCHexesv0.net]
フォームコントロールボタンの文字の色を変えたいんだけど
セレクトしない方法はないのですか?

Set n = Worksheets("Sheet1").Shapes("Button 1")
 n.Font.ColorIndex = 3

みたいな?

707 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 13:25:10.14 ID:Zcbsqwvta.net]
シート上のボタンならtoggleにしなくてもモジュールレベルのクリックフラグ変数で管理できねーか?

708 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 13:35:38.33 ID:8SavP0Th0.net]
>>687
出来合いのものを、わざわざ回避する利点は?

709 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 15:32:28.22 ID:tRk+L7lt0.net]
>>688
いや、最初コマンドボタンだったからコマンドの方がいいのかなって思っただけ
別に必要無いなら必要無いでいいし

710 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 18:23:21.18 ID:3q2JAS6ba.net]
>>686
逆に何でセレクトしなきゃならんのかが分からん。
普通セレクトなんてしないだろ。

711 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 18:24:04.16 ID:3q2JAS6ba.net]
すまん。
>>685向けね。



712 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 19:38:10.94 ID:DrTFst260.net]
>>685
Worksheets("Sheet1").Shapes("Button 1").TextFrame.Characters.Font.Color = vbRed
または
Worksheets("Sheet1").Buttons("Button 1").Font.Color = vbRed

SelectするとButtons("Button 1")をオブジェクトとしてSelectionに持つので
Selection.Font.Color = vbRed でいける
一方、ShapesはFontオブジェクトをもっていないので
Fontオブジェクトを持っているヤツまで掘り下げてかなければダメ

ということだと思う。

713 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 19:53:54.32 ID:AF0984djx.net]
>>692
直感的な説明だが、オブジェクトがオブジェクトを持つという表現は間違い
オブジェクトが持つのはあくまでメソッドとプロパティからなるメンバで、いわゆる下位オブジェクトにはメンバを介してアクセスしてるだけだからな

714 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 20:15:31.85 ID:oVsH3Gmz0.net]
>>692
マクロの記録でやってたので。1行で可能なのですね。
TextFrame.Characters.Font.Colorでググったら出てきました。
ありがとうございました。

715 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 20:55:59.08 ID:afY4COyy0.net]
ちなみにButtonsとかCheckBoxesとかは隠しプロパティ
ヘルプにもでてこないからな

なんで隠してあるのかねぇ

716 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 00:26:44.47 ID:oSJcOqyea.net]
>>694
分かるよ。
そういう人がとても多いから。

でも、殆どの処理はセレクト無しで書ける。
個人的にはセレクト無しで書けない場合でも何とかセレクトせずに書けないかを考える。

717 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 00:45:00.70 ID:BN72T8jr0.net]
まあ、大多数の用途では得られるメリットが少なすぎてSelectを消す意味は薄いけどな

718 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 01:23:50.46 ID:2PxYmIQzx.net]
オブジェクトのプロパティにアクセスする処理でSelectメソッドはなるべく使わない
コードの実行中にデバッグ作業を行ったときなどに予期しないオブジェクトが選択されて、アクセスしたいプロパティにアクセス出来ずエラーになることがよくあるからね
Rangeオブジェクトを指定していたはずがShapeオブジェクトやOLEObjectオブジェクトを選んでいたりとか

719 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 01:43:15.08 ID:O2udkTbW0.net]
Selectは必ず代替手段があるから、範囲選択してユーザーに注意を促すとかでなけりゃSelect使う事に疑問を持った方がいい。

720 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 06:22:03.30 ID:ZKd7S1fn0.net]
起動中のIEからさらに別窓で開かれるフォーム入力用窓のIEオブジェクトを取得して操作したいと考えているのですが、
Function hoge() As WebBrowser
Dim tmp As Variant
For Each tmp In CreateObject("Shell.Application").Windows
If TypeName(tmp.document) = "HTMLDocument" Then
Set hoge = tmp
Exit Function
End If
Next tmp
End Function
のようにShellを使ってもIEオブジェクトを取得できなくて困っています

Set objIE = MAGIC(hWnd)
のような形で、ハンドルからIEオブジェクトを取得する方法は無いでしょうか
他に方法があれば、ハンドルから取得する方法にこだわりません
ただし、諸事情により外部からライブラリをダウンロードしてきて使用する、といったことはできないです

721 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 08:15:14.57 ID:BN72T8jr0.net]
>>700
別窓かどうかの判定が抜けてる
LocationNameとかLocationURLあたりを調べないと



722 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 11:59:50.98 ID:uwQxUsVy0.net]
IEが複数あるかもしれないのに見つかったら抜けちゃうコードで何かおかしいと感じないの?

723 名前:デフォルトの名無しさん [2017/12/24(日) 15:06:20.77 ID:6Phr71Y20.net]
Dim u As Long
Range("A1", "I5").Value = u
u = Round(u, 4)

四捨五入したいのに全部ゼロになる!

724 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:18:15.83 ID:CcW1Sn5Aa.net]
>>703
uには何が入るの?

725 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:18:38.84 ID:CcW1Sn5Aa.net]
てか、そりゃゼロになるだろw

726 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:27:49.11 ID:dho/ilxra.net]
何かが逆でワロタ。

727 名前:デフォルトの名無しさん [2017/12/24(日) 15:36:05.76 ID:6Phr71Y20.net]
>>704
A1からI5のセルを桁指定したいんだ。
どうすればいいか教えてくれ

728 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:53:02.16 ID:sjlc/tcta.net]
>>707
A1からI5の範囲に初期化したばかりのu(=0)を入れてる。
入れるのは逆で、入れた後で桁変更して戻す必要もある。
最初からuを使わずに自分自身に桁変更した自分を入れる方が普通かな。

そもそも見た目だけ桁指定する方が一般的だと思うが。

729 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:54:56.74 ID:CcW1Sn5Aa.net]
桁指定したいならexcel vba 書式設定
でググりなさい

730 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:56:16.29 ID:CBEBXlX2a.net]
というか、値が複数(配列)だから一発でいけないだろ。

731 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 15:56:53.27 ID:JTJf6bSC0.net]
それぞれの行のB列からC列を引きたいのですが、下のコードだと
すべてB2-C2となってしまいます。
どうすればよろしいかご教示ください。

Dim i As Long
Dim Lrow As Long
Lrow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To Lrow
Cells(i, "D").Formula = "=B2-C2"
Next



732 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 16:09:57.86 ID:U3mSSLWjx.net]
>>711
数式書き込んでるループ内の処理の右辺を
"=$B" & i & "-" & "$C" & i
にするだけ
折角行インデックスをiで指定してループ回してるんだから使わないと

この程度のことだったらVBA使わなくても組み込みのテーブル機能で実現できるけどね

733 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 16:11:04.02 ID:O2udkTbW0.net]
>>711
Sub foo()
Cells(2, 4).Formula = "= B2 - C2"
Cells(2, 4).Copy
Lrow = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(2, 4), Cells(Lrow, 4)).PasteSpecial
End Sub

734 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 16:13:21.90 ID:JTJf6bSC0.net]
>>712>>713

ありがとうございました。

735 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 17:56:35.14 ID:ZKd7S1fn0.net]
>>701-702
コードはあくまでも例で、実際はURLや文書内の文字列から判定しています
今回問題なのは、CreateObject("Shell.Application").WindowsをFor Eachで全要素を調べても、要素にそもそも含まれていない点です
IEの子窓として存在しており、タスクマネージャーで調べるとプロセスも存在するのに、IEオブジェクトを取得できません
しかし、WindowsAPIのFindWindowを用いるとハンドルの取得は可能だったので、
Set objIE = MAGIC(hWnd)のような形でハンドルからIEオブジェクトを取得する関数を作れないか質問させていただきました

736 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 19:48:46.67 ID:TDjZS1ex0.net]
Excel2010です
以下のコードを実行すると、"$A$2"が表示されます。
セル範囲に添字0を付けた場合、セル範囲の先頭セルが参照される
(この場合B2)と思い込んでいたのですが、私の誤りでしょうか?

MsgBox(worksheets(1).range("B2:C3")(0).address)

737 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 21:16:40.55 ID:ODr8GH0o0.net]
0 じゃなく 1

738 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 22:01:25.06 ID:TDjZS1ex0.net]
>>717
ありがとうございます
OffSet()だと原点がゼロなので
そういうのと混同していたかも知れません

739 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 22:44:17.96 ID:4FfGU/eI0.net]
Dim FSO As Object
Set FSO = CreateObject("scripting.filesystemobject")
Dim folder As Object
Set folder = FSO.getfolder(ファイルパス)
Dim f As Object
 For Each f In folder.Files
  If f.Name Like "*" & Month(Date) & "*" Then
   ’ここでファイル名を翌月に変えてコピーを作成したい
  End If
 Next

ファイル名は「AAA〇〇月BBB」で統一(ABは文字列で〇〇は月を二桁表示)
抽出できた今月ファイルをコピーして名前の〇〇を翌月に変更したもの(翌月ファイル)を同フォルダ内に作成したいです
コピー元ファイル名を継承して一部だけ変更する良い方法が見つからなかったので教えてください

740 名前:デフォルトの名無しさん mailto:sage [2017/12/24(日) 23:29:24.13 ID:XB6s5ekxa.net]
>>714
そのセル全部のRangeに対して"=B2-C2"でいける。

741 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 00:16:31.32 ID:2KDGjSox0.net]
>>719
Sub foo(FolderPath As String)
Dim FSO As New FileSystemObject
Dim c As New Collection
Dim Folder As Folder
Dim File As File

FindWord = "*" & Month(Date) & "*"
Set Folder = FSO.GetFolder(FolderPath)
For Each File In Folder.Files
If File.Name Like FindWord Then Exit For
Next
If File Is Nothing Then Exit Sub

s = Split(File.Path, "\")
For i = LBound(s) To UBound(s)
If s(i) Like FindWord Then
e = Split(s(i), ".")
s(i) = Month(DateAdd("m", 1, Date)) & s(1)
End If
FilePath = FilePath & s(i)
If i < UBound(s) Then FilePath = FilePath & "\"
Next

FSO.CopyFile File.Path, FilePath
End Sub

試してないけどこんな感じかなぁ。



742 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 08:06:21.04 ID:fMKsEfdQa.net]
>>719
fileName = Replace(fileName,○○,××)

743 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 08:07:54.57 ID:fMKsEfdQa.net]
ああ、AAAとBBBに数字がない前提じゃないとダメだな

744 名前:717 mailto:sage [2017/12/25(月) 12:59:33.91 ID:5/ecyLcnM.net]
>>721>>722回答ありがとうございます
まだ試せていませんが
AAA○○月BBBじゃなくて
AAABBB○○月にした場合もう少し簡単に記述出来ますかね?
ちなみにABに数字は含まれてないです

745 名前:デフォルトの名無しさん [2017/12/25(月) 16:18:43.87 ID:dIh/hlW50.net]
んんんんあああああああああああああああああああああああああああああああああ

746 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 16:44:33.34 ID:DuOFgh3Va.net]
コピーしてファイル名置換するだけでしょ?
フォルダもすでに取得してるなら
fso.copyfile file.Path,folder.Path & "\" & Replace(file.Name,"○○","××")
だけで行けるんじゃね

747 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 17:30:49.11 ID:1470x9yD0.net]
UserFormに「次へ」のボタンをつくり複数のUserFormを次々と経由することで対話式に値を取得していきたいと思っています
誤った選択をしてしまった場合に備え、戻るボタンも作るとします
○UserForm1の「次へ」ボタンのクリックイベントに以下のように記述しました
Me.Hide
UserForm2.Show
○そしてUserForm2の「戻る」ボタンのクリックイベントには以下のように
Me.Hide
UserForm1.Show

うまくいったと思いきや、一度1に戻ってからもう一度UserForm2を再表示させると
UserForm2のinitializeに書いた処理が実行されません。

仕方が無いので1の次へに
UserForm2.Show
Unload Me
と書いてみると、今度は2から戻る時に、「フォームは既に表示されています。モーダルに表示できません」と出ます
2の「戻る」には上に書いたようにMe.Hideがあるにも関わらずこのエラー表示
解決法はありますか?

748 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 17:46:45.39 ID:DuOFgh3Va.net]
>>727
ユーザーフォームの行き来はめんどくさいしスパゲティになりがちだからやめた方がいいと思う
というのはさておき、initializeじゃなくてactivateイベントにしてみたらどうかね

749 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 17:48:18.57 ID:1470x9yD0.net]
いやいや何か間違えてる
修正

仕方が無いので2の「戻る」に
UserForm1.Show
Unload Me
と書いてみると、今度は1から2にもう一度行こうとすると、「フォームは既に表示されています。モーダルに表示できません」と出ます
ついでにとにかくhideは避けてすべてunloadにしてもやはり2→1の段階で同じアラート
解決法はありますか?

750 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 17:48:59.15 ID:1470x9yD0.net]
>>728
ありがとうございます
調べてみます
分からなかったらまた書きますのでお願いします・・・

751 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 18:01:10.24 ID:1470x9yD0.net]
>>728
うまくいったようです
3時間ほど解決法が見つからず頭抱えてました
感謝です



752 名前:デフォルトの名無しさん mailto:sage [2017/12/25(月) 22:53:06.92 ID:S4ukHgvI0.net]
sub test()
'マクロ起動用

753 名前:エクセルがあるフォルダ内のフォルダ名の取得
Dim strPattern As String
Dim strFolder As String
strPattern = "C:\xxxxx"
strFolder = Dir(strPattern, vbDirectory)

Do While Len(strFolder) > 0
If GetAttr(strPattern & strFolder) And vbDirectory Then
If strFolder <> "." And strFolder <> ".." Then 'if文始まり
'各フォルダ内にあるエクセルファイル名の取得
Dim FSO As Object
Set FSO = CreateObject("scripting.filesystemobject")
Dim folder As Object
Set folder = FSO.getfolder(strPattern & strFolder)
Dim f As Object
For Each f In folder.Files
If f.Name Like "*" & Month(Date) & "*" Then 'ファイルパスに今月が含まれている場合
FSO.copyfile f.Path, folder.Path & "\" & Replace(f.Name, Month(Date), Month(DateAdd("m", 1, Date)))
Debug.Print f.Name
End If
Next
End If 'if文終わり
End If
strFolder = Dir()
Loop
End Sub

717ですが上の記述で一応期待通りの動作をしてくれました
皆さんありがとうございました
ただこれだとファイル名に1〜12の数字を使えなかったりエクセル以外も取得できるのでまだ改良が必要そうです
[]
[ここ壊れてます]






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<339KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef