Excel VBA 質問スレ Part20
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/08/04(木) 14:30:44.3802 http://pc11.2ch.net/test/read.cgi/tech/1168308855/
03 http://pc11.2ch.net/test/read.cgi/tech/1180192018/
04 http://pc11.2ch.net/test/read.cgi/tech/1189814602/
05 http://pc11.2ch.net/test/read.cgi/tech/1197448064/
06 http://pc11.2ch.net/test/read.cgi/tech/1205231499/
07 http://pc11.2ch.net/test/read.cgi/tech/1212587819/
08 http://pc11.2ch.net/test/read.cgi/tech/1219673793/
09 http://pc11.2ch.net/test/read.cgi/tech/1228372971/
10 http://pc12.2ch.net/test/read.cgi/tech/1235332603/
11 http://pc12.2ch.net/test/read.cgi/tech/1241885130/
12 http://pc12.2ch.net/test/read.cgi/tech/1247566074/
13 http://pc12.2ch.net/test/read.cgi/tech/1254281104/
14 http://pc12.2ch.net/test/read.cgi/tech/1262748898/
15 http://pc12.2ch.net/test/read.cgi/tech/1271261239/
16 http://hibari.2ch.net/test/read.cgi/tech/1280045912/
17 http://hibari.2ch.net/test/read.cgi/tech/1289182437/
18 http://hibari.2ch.net/test/read.cgi/tech/1298240666/
前スレ:
Excel VBA 質問スレ Part19
http://hibari.2ch.net/test/read.cgi/tech/1305754555/
0002デフォルトの名無しさん
2011/08/04(木) 14:31:25.82★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Application』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
0004デフォルトの名無しさん
2011/08/04(木) 21:56:17.18例えば列を20列目までデータを入力した後
データを全て消しても、UsedRange.Rows.Counで最後の列を取得すると
20列目が選択されてしまいます。
これを解消するには何か手段はあるのでしょうか?
よろしくお願いします。
0005デフォルトの名無しさん
2011/08/04(木) 22:11:49.66workbookのブックナンバー(シートでも出てくるindexと呼ばれるヤツ)を取得するにはどうすればいいんですか?
エラーが出るばかりでエラいことになってるんですが・・・
0006デフォルトの名無しさん
2011/08/04(木) 22:15:20.68いままで .value となるべきところではずっと省略して書いてきたんですが
たったいま初めて .valueを書かないと正常に実行されない現象を確認しました。
0007デフォルトの名無しさん
2011/08/04(木) 22:30:50.81UsedRangeを使わなければいい。
>>5
Index使わないとダメ?For eachで何とかならない?
>>6
外すな。付けとけ。
0009デフォルトの名無しさん
2011/08/04(木) 22:45:56.72VBAからwindowsのAPIを使いたいと思って、調べた結果
VBAから直接呼び出せないAPIはDLLを作って呼び出す方法が
有るのは見つけたのですが、最終的にDLLになるんだからDLL作成
言語は何でもいいという認識で良いですか?
0010デフォルトの名無しさん
2011/08/04(木) 23:42:25.911回保存したら行ける気がする
しかし、いま2007で確認したら、ちゃんと消した後の範囲返したぞ
>>5
WorkBooksに使うインデックスなら、名前でも行けるからブック名使っとけ
>>5
Rangeのデフォルトプロパティは実はValueではないからValueを期待した省略はやめとけ
>>9
そのAPIが呼び出せて、VBAから呼び出し可能なDLLが作れればなんでも良いんじゃね
0011デフォルトの名無しさん
2011/08/05(金) 02:54:06.12>>10 の意見に賛成だけど
どうしてもIndex取得したければ自前で作るしかない
でも Index だと 途中でブックをクローズしたりすると
それ以降のIndexが ずれるけどいいの?
まあ下記とかで取得するしかないような
Sub TEST()
WBNO = BookNo("BOOK2.XLS")
Debug.Print WBNO, Workbooks(WBNO).Name
End Sub
Function BookNo(WBNAME)
'ブックが存在していない場合 0 を返す
Dim No As Integer
Dim Wb As Workbook
BookNo = 0
No = 0
For Each Wb In Workbooks
No = No + 1
If LCase(Wb.Name) = LCase(WBNAME) Then
BookNo = No
Exit For
End If
Next
End Function
0012デフォルトの名無しさん
2011/08/05(金) 10:27:36.52何をやりたいのかよく分からん。
>>11
そのコードが実行される時、アプリケーション内にブックが存在しないケースなんて有るの?
001311
2011/08/05(金) 10:43:58.78たぶんコメントの事をいってるのだと思うけど
プロシージャ BookNoは ※文字列※としての"ブック名"を引数として必要としてるが
Callする際に存在していない(又は無効な)ブック名を指定する事はいくらでも可能なわけだが
0014デフォルトの名無しさん
2011/08/05(金) 11:50:21.970015デフォルトの名無しさん
2011/08/05(金) 15:33:17.88ああ、なるほどね。
済まんかった。
0016デフォルトの名無しさん
2011/08/05(金) 21:08:35.58押せばVBAが実行されるようになっていますが
画面を下へスクロールさせるとボタンだけが取り残されてしまい
現時点では手動でボタンの移動を行っています。
これをどうにかして画面をスクロールさせた場合でも
同じ位置に表示させることは可能でしょうか?
0017デフォルトの名無しさん
2011/08/05(金) 21:10:56.66http://raicho.2ch.net/test/read.cgi/newsplus/1312544716/
0018デフォルトの名無しさん
2011/08/05(金) 21:21:19.27VBAとは関係ないけど
"ウインドウ枠の固定"をしておいてスクロールしないエリアへ
コマンドボタンを配置じゃダメなの?
0019デフォルトの名無しさん
2011/08/06(土) 11:28:15.73今まで順調に利用できていたのですが、つい先日から
、「このページを使用して、クリップボードから情報を貼り付けますか?」
というダイアログボックスが表示されるようになってしまいました。
環境は
エクセル2003
IE6 SP3
WinXP
です。
スクリプトによる貼り付けの許可は有効にしてあります。
どのような対処をすればよいでしょうか。
0020デフォルトの名無しさん
2011/08/06(土) 11:54:32.370021デフォルトの名無しさん
2011/08/06(土) 12:05:12.28ちょっとくぐってみたけど
そのメッセージは、IEからでてない?
Excel vba 関係ないような
スレチ じゃね
0022デフォルトの名無しさん
2011/08/06(土) 21:54:06.01どんなモジュールからでも参照できるということで
他のブックからは参照できないという認識であってますか?
もしそうならブック間でも共通に使えるような変数ってどうにか作れないのだろうか?
0023デフォルトの名無しさん
2011/08/06(土) 21:59:13.20わたしがBookのIndexが欲しいと言ってるから使いたいのだ。
きみがSheetのIndexの使用をわたしに禁止されたら困るだろ?
0024デフォルトの名無しさん
2011/08/06(土) 22:10:28.24変数は、値渡し、参照渡し、矢切りの渡し、
どれをメインに使っていくのが得策でしょうか?
0025デフォルトの名無しさん
2011/08/06(土) 22:11:27.24セルに書いておけば良いじゃん
0026デフォルトの名無しさん
2011/08/06(土) 22:15:32.32シートを汚したくないの
0027デフォルトの名無しさん
2011/08/06(土) 22:17:16.84その考え方で合ってると思います。
が、
そもそも、複数モジュール間のやりとりをPublicな変数で行うのは如何なものかと思います。
プロパティであれメソッドであれ、セッタやゲッタを作ってやりとりすれば
モジュール間であれBOOK間であれ、
特に深く考える必要も無くて宜しいんじゃないでしょうか。
0028デフォルトの名無しさん
2011/08/06(土) 22:22:58.97ありがとうございます。
セッタやゲッタのことについて勉強して出直してきます。
0029デフォルトの名無しさん
2011/08/06(土) 22:26:07.05本だけじゃ使いこなすスキルにおいて身に付きません。
Excelのシート関数も同様で、結局は他人の作った関数がいっぱいあるシートをたくさん見ているときがかなり上達した気がしました。
VBAでも誰かが作ったコードを大量に見れるようなサイトはないですか?
0030デフォルトの名無しさん
2011/08/06(土) 22:31:28.63Sub worksheet_change(ByVal a As Range)
MsgBox "うんこ"
End Sub
と書いたら反応しないのはぜですか?
また、シートモジュールに書いても別シートだと反応しないのはなぜですか?(Private Subじゃないのに)
0031デフォルトの名無しさん
2011/08/06(土) 22:34:31.73釣り?
003230
2011/08/06(土) 22:43:27.11003330
2011/08/06(土) 22:43:53.13シートモジュールじゃなく標準モジュールに
Sub worksheet_change(ByVal a As Range)
MsgBox "うんこ"
End Sub
と書いたら反応しないのはぜですか?
また、シートモジュールに書いても別シートだと反応しないのはなぜですか?(Private Subじゃないのに)
0034デフォルトの名無しさん
2011/08/06(土) 22:50:29.28つヘルプ
0035デフォルトの名無しさん
2011/08/06(土) 23:36:03.24VBAに限らずこう言ったものを作りたいと言った時に、
こう言った組み方をすると綺麗に実装出来るよと言う
定石的な物が有ります。
それをデザインパターンと言うのですが、
VBAには継承と言うものが無く(当然、継承が無いわけですから
オーバーロードやオーバーライドは存在しません。
しかし何故かインターフェースは有りますので、そちらでポリモーフィズムは
使えたりします。)
実際には継承の替りに委譲を使ったりしなければなりませんが、
それでも考え方として取り入れると、VBA固有のクラスに関しては
別途使い方を覚える必要はあるものの、
どういう組み方をすればいいかの参考にはなると思います。
求めているものと違うかもしれませんがご参考までに。
ttp://www.atmarkit.co.jp/fdotnet/vbcheer/vbcheer12/vbcheer12_01.html
0036デフォルトの名無しさん
2011/08/07(日) 00:04:09.08いつまでたっても馬鹿なわたし
0037デフォルトの名無しさん
2011/08/07(日) 01:10:11.130038デフォルトの名無しさん
2011/08/07(日) 01:58:45.510039デフォルトの名無しさん
2011/08/07(日) 06:01:00.41ドジっ娘がてんぱってわたわたし
0040デフォルトの名無しさん
2011/08/07(日) 09:58:15.11どうやるの?
0041デフォルトの名無しさん
2011/08/07(日) 10:20:00.81スレ違いで有れば削除します。
VBAでGroupMaxのメール操作は出来ますでしょうか?
具体的には共有book(非ブックの共有)の勤務表等で
間違いや未記入が有る場合に対象者にお知らせメールなどを
VBAで自動的に送信したい。
Outlookが使えれば出来そうなんですが・・・・。
使用環境
Win XP SP3
Excel 2007
GropMax 6
0042デフォルトの名無しさん
2011/08/07(日) 11:07:52.20たが ちょっとコメントを
GroupMaxって日立のグループウェアでしょ
この手のアプリって自社開発ソフト以外の外部アプリから操作って基本出来ない(させない)って
思うけどな。(セキュリティ問題もあるし)
まあGroupMaxの開発元に聞くしかないよ
004337
2011/08/07(日) 12:07:18.00ゎたしどうゃって作るか聞ぃてるんですけど♪
0044デフォルトの名無しさん
2011/08/07(日) 14:32:16.91そのモジュール内のどのプロシージャが実行されるときにその直前に必ず実行されるのでしょうか?
気になって夜も眠れません。
0045デフォルトの名無しさん
2011/08/07(日) 14:35:33.450046デフォルトの名無しさん
2011/08/07(日) 14:36:41.67宣言セクションって、変数を宣言することくらいしかできないの?
その変数に初期値を代入しようとしてるんだけど、そうしたらマクロ自体が実行できなくなった。
0047デフォルトの名無しさん
2011/08/07(日) 15:07:21.460048デフォルトの名無しさん
2011/08/07(日) 15:16:20.14フォームを消すための「Unload UserForm1」みたいなコマンドは
付けておいたほうがいいですか?または無くてもいいですか?
またそうするのがいいと思った考え方を教えてください。
0049デフォルトの名無しさん
2011/08/07(日) 15:49:23.590050デフォルトの名無しさん
2011/08/07(日) 16:23:07.50ありがとうございます。
そうするとloadはshowを含み
unloadはhideを含むということですね。
つまりshowしたらload+show、
unloadしたらhide+unload
をしたことになる?みたぃな。
0051デフォルトの名無しさん
2011/08/07(日) 16:29:44.74UserForm_Initialize()
UserForm_Load()
の2つあるのに
VBAなら
UserForm_Initialize()
の1つしかないんですね。
ついでに質問ですがVBでプログラミングしてるときに
UserForm_Initialize()とUserForm_Load()の使い分けってあるんでしょうか?
またどちらかをメインに使ったほうがいいのであればその心を教えてください。
0052デフォルトの名無しさん
2011/08/07(日) 17:20:02.65はどういうときに使うの?
0053デフォルトの名無しさん
2011/08/07(日) 17:30:38.990054デフォルトの名無しさん
2011/08/07(日) 17:46:19.32なるほど。さっぱりわからん。Thanks.
0055デフォルトの名無しさん
2011/08/07(日) 18:04:32.85出来ないはず。おかげでイベントハンドラ書くのがしんどい。
0056デフォルトの名無しさん
2011/08/07(日) 18:08:03.93やっぱりできなかったのか。ありがとう。Thanks
0057デフォルトの名無しさん
2011/08/07(日) 18:18:36.12クラスモジュール使えば それに近い事できるけど
メンドイからその説明はしない
0058デフォルトの名無しさん
2011/08/07(日) 18:30:38.51> UserForm_Initialize()とUserForm_Load()の使い分けってあるんでしょうか?
当然ありますよ。自分はフォームを拡張するクラスを作って、WithEvents使って
クラス側でフォームのイベント処理をしているけど、InitializeにもLoadにもコードは書いてあるし
これはどちらかにまとめることも、当然ながら入れ替えることも出来ない。
> またどちらかをメインに使ったほうがいいのであれば
それは目的次第だよ。基本的に目的に合ってる方を使えば良い。
両方とも目的に合ってるなら好きな方を使えばいいし、目的に合わない物を無理して使う必要も無い。
>>47,55-56
クラスとコレクション使って、疑似コントロール配列にすれば良い。
疑似なんて言うと本来のというかVB6のコントロール配列に劣るように聞こえるかも知れないが
実は疑似コントロール配列の方が高度な処理が出来て、VB6でも標準のコントロール配列を使わず
疑似コントロール配列で実装することも多い。
0059デフォルトの名無しさん
2011/08/08(月) 14:18:45.05横レスになるけど失礼します
疑似コントロール配列の作り方というか
綺麗に実装出来る参考となる文献なりサイトってご存知ないですか?
何度か疑似コントロール配列は作った事はあるんですが
コレクションは使わず
配列にクラスオブジェクトを入れてたりしたんですが
なんか定石みたいなのって ないかなって思ってます。
0060デフォルトの名無しさん
2011/08/08(月) 17:57:56.02添字でアクセスしたいだけとか
イベントをまとめたいとか
動的に作成したいとか
目的によって実装方法は千差万別
(疑似)コントロール配列は、目的そのものではなく
目的を満たすための手段でしかないんだから定石も無いし
実装の何を以て「綺麗」とするかは人それぞれなので
君が綺麗だと思う実装方法は君にしか見つけられない
つーか、初心者は綺麗とか定石とかに拘りすぎ
綺麗に書くことが目的になっていて、その先が見えていない
全てのコードは目的を実現するための手段でしかないことを忘れるな
0062デフォルトの名無しさん
2011/08/08(月) 19:34:54.73コードに「綺麗さ」を求める奴は大概トリッキーなコードを書いて後々保守する奴がそれで苦労させられるということを全く考えていない
所期の目的を達してなおかつ判りやすいというのを目標にすりゃぁいいものを
0063デフォルトの名無しさん
2011/08/08(月) 22:43:33.680064デフォルトの名無しさん
2011/08/08(月) 23:02:15.51VBAにおけるマルチスレッド処理
http://bbs.wankuma.com/index.cgi?mode=al2&namber=47345&KLOG=80
0065デフォルトの名無しさん
2011/08/09(火) 11:26:23.27お前の「後々保守する奴がそれで苦労させられるようなトリッキーなコードが綺麗なコードである」
という認識が間違ってるとは思わないの?
0066デフォルトの名無しさん
2011/08/09(火) 11:41:23.140067デフォルトの名無しさん
2011/08/09(火) 13:10:06.34Office:Excel2010(14.0.6023.1000)
【コード】
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
シートの枚数分ループ---
maxRow = Worksheets(targetSheet).Range("A65536").End(xlUp).Row
Worksheets(targetSheet).Range("1:" & maxRow).Copy
targetRow = Worksheets(1).Range("A65536").End(xlUp).Row + 1
Worksheets(1).Rows(targetRow).PasteSpecial Paste:=xlPasteValues
----
【現象】
上記コードで複数シートに入力されているセルを1つのシートへまとめてるVBAマクロ
を実行した後に、
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic ←これ
End With
を実行するとExcelのステータスバーに
再計算:(プロセッサ 4個): 0%
と出てだんまり状態になってしまう。
マウスホイール回転やクリックするとすぐに再計算が実行されて終わるけど
何もしないでいるとずっとこのままで、マウスカーソルが○マークになって
マクロの処理は終わっているのにまだ処理中になっている状態に見えてしまい
気になるのでなんとかしたいんですが、解決策をご存知の方はいらっしゃいますか?
自動再計算はVBA終了後ONに戻したいです。
ちなみに、コピー対象のセルは他のシートを参照する関数を使ってます。
0068デフォルトの名無しさん
2011/08/09(火) 13:28:16.96> お前の「後々保守する奴がそれで苦労させられるようなトリッキーなコードが綺麗な
> コードである」という認識が間違ってるとは思わないの?
>>62 も間違っていると書いてあるんだが。
ひょっとして馬鹿?
0069デフォルトの名無しさん
2011/08/09(火) 14:10:20.51というのが間違い。
コードに綺麗さを求める奴は、大概トリッキーなコードは書かないだろ。
まあC++で簡単なテンプレートを使うくらいで「トリッキーなコード書きやがって」とかいう低脳もいるが。
0070デフォルトの名無しさん
2011/08/09(火) 14:14:17.01>>62が間違っていると主張しているのは、コードに綺麗さを求める行為。
なぜなら、綺麗なコードは得てしてトリッキーなコードであり、後続のメンテナを苦しめるから、という主張でしょ。
0071デフォルトの名無しさん
2011/08/09(火) 14:28:42.89> 綺麗なコードは得てしてトリッキーなコードであり
新たな主張?
>>62 が書いてるのは「「綺麗さ」を求める奴は大概トリッキーなコード
を書いて」だけ。
「綺麗さ」を求める奴が「綺麗なコード」を書いてるとは書いてないよ。
0072デフォルトの名無しさん
2011/08/09(火) 14:36:50.00> 新たな主張?
表現が間違ってた。訂正する。
なぜなら、綺麗なコードは得てしてトリッキーなコードであり、後続のメンテナを苦しめるから、という主張でしょ。
↓
なぜなら、綺麗なコードを求める行為は得てしてトリッキーなコードを産みだし、後続のメンテナを苦しめるから、という主張でしょ。
綺麗なコードを求めると、なぜ全員が綺麗なコードが書けないと思っているのかが不思議。
綺麗なコードを求めて、綺麗なコードを書けばいいでしょ。
0073デフォルトの名無しさん
2011/08/09(火) 14:49:37.27Eventを使いこなすと悪魔と言われるからな。
0074デフォルトの名無しさん
2011/08/09(火) 14:57:03.68> 綺麗なコードを求めると、なぜ全員が綺麗なコードが書けないと思っているのかが不思議。
「大概」を無視して勝手に不思議がる方が不思議なんだが...。
> 綺麗なコードを求めて、綺麗なコードを書けばいいでしょ。
陥りやすいってことでしょ。
真偽は知らんけど。
0075デフォルトの名無しさん
2011/08/09(火) 15:42:27.44>>62はおろか、お前さんらも知るはずもないので、議論しても無駄。
「綺麗なコード」を求める行為を良しとするかどうかは、>>62が思う「綺麗なコード」の内容を
聞かなければ議論しても無駄。
0076デフォルトの名無しさん
2011/08/09(火) 15:47:43.96誰が何に陥りやすいと?
0077デフォルトの名無しさん
2011/08/09(火) 16:53:12.31チェックの状態でif文を使い判断させたいのですが
このオブジェクトの指定方法が分かりません。
シート上のチェックボックスの名前はチェックにしています。
chk = Worksheets("Sheet1").OLEObjects("チェック").Object.Value
だと上手くいきません。
どこが悪いのか分かる方教えてください。お願いします。
0078デフォルトの名無しさん
2011/08/09(火) 17:01:43.62>誰が何に陥りやすいと?
>>「綺麗さ」を求める奴は大概トリッキーなコードを書いて
の意味が理解できないの?
0079デフォルトの名無しさん
2011/08/09(火) 19:42:33.520080デフォルトの名無しさん
2011/08/09(火) 20:21:30.59これでいいんじゃね
chk = Worksheets("Sheet1").CheckBoxes("チェック").Value
If chk = xlOn Then
Debug.Print "onです"
Else
Debug.Print "offです"
End If
0081デフォルトの名無しさん
2011/08/09(火) 20:24:45.73役割ごとにきちんと分割してあれば見やすいな。
綺麗なのとはずれるけど
0082デフォルトの名無しさん
2011/08/09(火) 20:25:36.88とかそんな感じじゃないの
0084デフォルトの名無しさん
2011/08/09(火) 22:14:20.22とセルに入っている内容を
replaceを使って
=ROUNDDOWN((( D3 ) - 26 * 110) * Sheet1!E2,0)
のようにしたいのですが上手くいきません。
分かる方お願いします。
0085デフォルトの名無しさん
2011/08/09(火) 23:17:50.35上手くいきません。だけじゃなく
どのようなコードで どうゆう結果なのか書いてくれないと
(エラーなら エラーめっせーじも)
もしかして
Rangeオブジェクトのreplaceメソッドを使ってるのかな?
だとしたら この例だと
計算式が 一時的にせよ 破綻しないように変更するの難しいような
つまり 一発で ( ) を追加できない限り 計算式が一時的に破綻する
(破綻した時点で 実行時エラー となる)
下のやり方の方が良いんじゃない?
.Formula で計算式を文字列として取り出し
変更(Replace関数等使って)後に 元のセルに戻す
008684
2011/08/09(火) 23:47:51.50Cells(1, 1).Formula = Replace(Cells(1, 1).Formula,
"=ROUNDDOWN" * " * Sheet1!E2,0)", "=ROUNDDOWN(" * ") * Sheet1!E2,0)")
これでいくと型が一致しません。とエラーが出ます。
多分*のところが駄目なのかと思いますが解決策が見つかりません。
>つまり 一発で ( ) を追加できない限り 計算式が一時的に破綻する
まさにその状態で直接書き換えるぶんには破綻しないのですが
replaceで一気にいくとエラーの件で書き換えられません。
0087デフォルトの名無しさん
2011/08/10(水) 00:11:55.31これ自体が VBA の文字列式(構文的)に 既に破綻している
"=ROUNDDOWN" * " * Sheet1!E2,0)"
"=ROUNDDOWN" と " * Sheet1!E2,0)"
を積算しようとしてるからな
やるなら
"=ROUNDDOWN"" * "" * Sheet1!E2,0)"
だろ
あと
Replace関数ってワイルドカードってできたっけ?
008884
2011/08/10(水) 00:15:39.47答えて頂きありがとうございます。自己解決しました。
Cells(1, 1).Formula = Replace(Cells(1, 1).Formula, "=", "")
Cells(1, 1).Formula = Replace(Cells(1, 1).Formula, "ROUNDDOWN", "ROUNDDOWN(")
Cells(1, 1).Formula = Replace(Cells(1, 1).Formula, "* Sheet1", ") * Sheet1")
Cells(1, 1).Formula = "=" & Cells(1, 1).Formula
=を無くして式でな形式にしてエラーを防ぎ
カッコを付けたして最後に=を足して式にする。
いろいろとお騒がせしました。
008984
2011/08/10(水) 00:16:55.33>Replace関数ってワイルドカードってできたっけ?
自分もそこが分からなかったのですができるかな?と思って。
0090デフォルトの名無しさん
2011/08/10(水) 01:02:54.05持論厨乙すぎる
なんで「綺麗=トリッキー」って等式作っちゃったのか気になる
まさかとは思うが変なアルゴリズムかまして短くまとまったコードを「綺麗」と形容してるんだとしたらゴミだな
009185=87
2011/08/10(水) 03:22:37.24もう見てないかもしれないけど
自己解決して納得してるんならいいんだが
セルへのアクセスは最小限にした方がいいような
自分ならこうする
Str = Cells(1, 1).Formula
Str = Replace(Str, "ROUNDDOWN", "ROUNDDOWN(")
Str = Replace(Str, "* Sheet1", ") * Sheet1")
Cells(1, 1).Formula = Str
0092デフォルトの名無しさん
2011/08/10(水) 05:47:40.16持論厨、乙
0093デフォルトの名無しさん
2011/08/10(水) 07:36:29.88ファイルにパスワードとかけるの?
0094デフォルトの名無しさん
2011/08/10(水) 08:12:36.02よくわからんがプロジェクトのロックのことか?
0095デフォルトの名無しさん
2011/08/10(水) 08:15:33.670096デフォルトの名無しさん
2011/08/10(水) 08:50:55.322007はどうか知らないけど、2003では起こらない現象で、2010では起こる
2003から再計算の仕様変更とかその辺りのが原因なのかな
2010でネット上に同じような質問あるけど、解決しましたってのはないしね
画面をクリックしないとマクロの動作が終了しないってのはなんなんだろう
マクロの動作というか再計算で固まるっていう現象
0097デフォルトの名無しさん
2011/08/10(水) 09:33:59.61whileを使ったループ処理をしたいんだけど、ループ処理中に
ループを停止させたい場合ってどうすればいいの?
ループ中はフォーム側に制御が戻ってこないから、
停止用ボタンを作っても押せないからどうしたもんかと。
0098デフォルトの名無しさん
2011/08/10(水) 10:17:45.830099デフォルトの名無しさん
2011/08/10(水) 13:29:38.13トリッキーなコードが綺麗なコードだと思ってる奴じゃ無いと
綺麗なコードを書こうとしてトリッキーなコードを書いてしまうなんてまれ。
0100デフォルトの名無しさん
2011/08/10(水) 13:33:46.640101デフォルトの名無しさん
2011/08/10(水) 15:08:57.77まず前提として
・コードが簡潔にまとまってる方が綺麗なコードである
・コードの量を(ある程度以上に)減らすとトリッキーなコードになる
というのがあると思う
こうやった方がコードが短くて簡潔だな、と思ってどんどんコード量を減らしていくと
ある程度のラインを超えるとトリッキーなコードになってくる
その加減が結構難しい。人によってもそのラインは違うだろうし
0102デフォルトの名無しさん
2011/08/10(水) 16:58:17.91目的を達するコードを、C++とかだと、それこそ無数に書きようがあるから、中にはトリッキーなものも出てくる。
でも、VBAはそんなにバリエーションないと思うんだけどね。寧ろトリッキーなVBAのコードの具体例を見てみたい。
0103デフォルトの名無しさん
2011/08/10(水) 17:13:50.73他人が見てイミフ、なんでこんなことしてるの?って思われるのが汚いコードじゃないの?
0104デフォルトの名無しさん
2011/08/10(水) 17:35:58.23たとえば、整数 a が
31以上40以下の場合、1を引く
40より大きい場合、2を引く
という処理があったとして
何も考えないで
If a >= 31 And a <= 40 Then
a = a - 1
End If
If a > 40 Then
a = a - 2
End If
綺麗(俺基準)に書くと
Select Case a
Case 31 To 40
a = a - 1
Case Is > 40
a = a - 2
End Select
だが、トリッキーなコードを書くと
a = a + (a >= 31) + (a > 40)
の1行でできてしまう
0105デフォルトの名無しさん
2011/08/10(水) 17:52:03.51真が-1って共通認識をプロジェクトで共有できているなら使ってもよさげなんだが。
コメントで、注釈してもいいかも。
a = a + (a >= 31) + (a > 40) ' 条件が真ならば-1
てな感じ。
でもまあ、その程度じゃない?式中で代入は出来ないし、評価の短絡もない。
他の構文もそうそう別の簡単な書き方がある訳でもない。With使いまくりは勘弁な。
0106デフォルトの名無しさん
2011/08/10(水) 18:01:41.25今なら速度気にすることはあんまりないし(そもそもコンパイルで差が出ないかもしれん)
まあ使っちゃいかん類の書き方だと思う
0107デフォルトの名無しさん
2011/08/10(水) 18:24:40.87うん、そうそう。
だから、綺麗なコードを書こうとしている奴が
> a = a + (a >= 31) + (a > 40)
なんてコードを書くかね、って話をしてるんだが、
なんか変な奴が一人まぎれてるっぽい。
そいつは、綺麗なコードを書こうとすると上のようなコードを書きがちだと思ってるらしい、
0108デフォルトの名無しさん
2011/08/10(水) 18:55:53.99うん、そうそう。
>その加減が結構難しい。人によってもそのラインは違うだろうし
その為の極端な例だと理解できない、注意力散漫な馬鹿ほど口出ししたいらしい
0109デフォルトの名無しさん
2011/08/10(水) 19:11:22.11複数のボタンをまとめるフォームというかコンテなってないの?
0110デフォルトの名無しさん
2011/08/10(水) 22:03:25.62図星だったってこと?さすがゴミだな
0111デフォルトの名無しさん
2011/08/10(水) 22:10:55.30コンボボックスで選択された文字を
セルにコピーする方法が分かりません。
ご教授願います。
サンプルです。
http://www1.axfc.net/uploader/Sc/so/264099.xls
0112デフォルトの名無しさん
2011/08/10(水) 22:21:56.090113デフォルトの名無しさん
2011/08/10(水) 23:33:50.04VBAってPコードコンパイラ積んでた?案外全部コロンでつなげた方が速いかもな。
0114デフォルトの名無しさん
2011/08/11(木) 00:29:14.76あれ?名前に90って入れなきゃいけなかった?
そんな意味のない返ししするなんて相当悔しかったんだね
0115デフォルトの名無しさん
2011/08/11(木) 00:33:00.010116デフォルトの名無しさん
2011/08/11(木) 00:48:56.93Pコードコンパイルかどうかはしらんが
デバッグメニューにコンパイルってあるからなぁ
0117デフォルトの名無しさん
2011/08/11(木) 01:15:53.14For TaTe = 3 To 99
Worksheets("sheet").Range(Cells(TaTe, 2), Cells(TaTe, 96)).Select
With Selection
.Replace What:=0, Replacement:=Worksheets("0").Cells(TaTe, 49).Value
99までは問題なく動くのですが100にすると
RangeクラスのReplaceメソッドが失敗しましたとエラーが出ます
0118デフォルトの名無しさん
2011/08/11(木) 01:29:09.70そういえばあったか。コンパイルって結果をブックにでも保存してるんか?毎回開くたびに走ってるのかな。
0119デフォルトの名無しさん
2011/08/11(木) 01:42:26.14100行目のどっかのセルに変なコードが入ってんじゃないの?
0120デフォルトの名無しさん
2011/08/11(木) 01:52:50.11無論、処理コストとの兼ね合いもあるが今までのレスを見ていると
もっと根本的なクラス設計の話が出て来て然るべきと思うんだけどなぁ。
まず、>>104みたいなのは論外。型を何だと思ってるんだ。
ついで言うと、グローバル変数を指定して他のクラスから呼ぶのもやめれ。
きちんとそう言った他のモジュールと橋渡しになるエンティティを作ること。
設計の際にはどのクラスにどう言う役割と責任を持たせるか最初から考えて作っておくこと。
細い所で技に走ってちょこっとソース縮めてみても根本的な所がしっかりしていなければ
全体的にグダグダなソースになってしまう。
0121デフォルトの名無しさん
2011/08/11(木) 06:10:00.58定義で調べても無いって言われるのは何故?
0122デフォルトの名無しさん
2011/08/11(木) 06:14:26.850123デフォルトの名無しさん
2011/08/11(木) 08:13:34.35>綺麗なコードで書くと言うのは、如何に可読性を高めて次回の改修作業をより行い易くする為に行うこと。
持論厨乙
て言うか、VBA でクラス設計云々言うのはちょっと痛すぎ。
0124デフォルトの名無しさん
2011/08/11(木) 08:54:13.62クラス設計云々はともかく、メンテナビリティは重要な要素だろうが
0125デフォルトの名無しさん
2011/08/11(木) 09:11:34.34とか言い出しかねないな。
0126デフォルトの名無しさん
2011/08/11(木) 09:17:48.390127デフォルトの名無しさん
2011/08/11(木) 09:52:30.13外は暑いけど、暖かく見守ってやろうじゃないか。
0128デフォルトの名無しさん
2011/08/11(木) 11:43:10.35ちゃんとしたクラス志向のオブジェクト言語の話なら解らんでもないが
VBAでの綺麗なコードって話で何言ってんのって感じだな
0129デフォルトの名無しさん
2011/08/11(木) 12:38:52.82設計が既に疎かになっているから次に進めないしここを突つくと顔真っ赤にして反論する。
テキトーに考えてテキトーに組んで、いい感じでスパゲッティーにするんだろうな。
まぁ、ここで色々反論してくる奴は、そんな基本的な事も分かっていない様だから、
オブジェクト指向の言語や関数型言語なんてまともに使えないまま一生を終えるんだろうな。
0130デフォルトの名無しさん
2011/08/11(木) 13:16:37.54井の中の蛙乙
これは一般的に言われている事だ
0131デフォルトの名無しさん
2011/08/11(木) 13:30:14.29VBA向けのクラスライブラリでも作るっていうのなら、気にする必要があるのかもしれないが、少なくともVBAの世界では一般的じゃないな。
0132デフォルトの名無しさん
2011/08/11(木) 13:33:46.93だから今話してるのはだな
部屋を片付ける=部屋を綺麗にする
だよね
例えばおもちゃを片付けるのをおもちゃ箱にしまうのか部屋の見えない所に隠してしまうのかの話で
どちらも部屋を綺麗にすることに変わりないがおもちゃ箱にしまったほうがまた遊ぶときすぐ遊べるってことだろ
そこに部屋を片付けるプランから考えるとかはまた別問題なわけで。
プログラミングにそれが大事なのは当たり前のようにわかってるよ。
ただ今はそんな話してないってだけじゃないのか?
0133デフォルトの名無しさん
2011/08/11(木) 13:39:10.98マクロ実行中に保存以外の方法で元の名前に戻すことはできますか?
0134デフォルトの名無しさん
2011/08/11(木) 13:53:00.94ブックを保存するマクロをどう書いてるのかを示して
0135デフォルトの名無しさん
2011/08/11(木) 14:00:44.31> VBA向けのクラスライブラリでも作るっていうのなら、気にする必要があるのかもしれないが、
> 少なくともVBAの世界では一般的じゃないな。
継承とコンストラクタにパラメータが渡せないのがきついからなぁ。
この二つがサポートされてりゃまだそれなりの暮らすライブラリがかけると思うんだが...。
0136デフォルトの名無しさん
2011/08/11(木) 14:15:22.77別のブックからデータを読み込んだりしますが、その時はファイル名は変わりません
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & tooshibango & ".txt", FileFormat:=xlText
0137デフォルトの名無しさん
2011/08/11(木) 14:27:52.44VBA+クラスで検索
約 2,000,000 件 (0.17 秒)
VBA+classで検索
約 493,000,000 件 (0.20 秒)
まぁこれを見て、一般的でないと見るかどうかだけどな。
0138デフォルトの名無しさん
2011/08/11(木) 15:04:47.33絶対的な指標になり得ないものを上げて判断を仰ぐのはペテンくさい。
ちゃんと他と比べないといけないよね。
C++ クラス
約 59,200,000 件 (0.18 秒)
VBA クラス ライブラリ
約 64,700 件 (0.19 秒)
C++ クラス ライブラリ
約 500,000 件 (0.06 秒)
あと、分かっててやってるんだろうけど、
検索使うときは対象絞るようにしないと、VBAのままだとVBにもヒットするよ。
VBでの話がしたい?なら該当スレへどうぞ。
そもそも何でそれを検索したんだ?クラス=オブジェクト指向なのか?本当に?
0139デフォルトの名無しさん
2011/08/11(木) 15:08:41.21SaveAsは名前を付けて保存だから、名前変わるのは当然だな
ブック名をどう使いたいか解らんが、名前をもとに戻す方法考えるより
保存するシートをマクロと別ブックにする方がいいんじゃね
0140デフォルトの名無しさん
2011/08/11(木) 15:14:24.49>検索使うときは対象絞るようにしないと、VBAのままだとVBにもヒットするよ。
はあ?
0141デフォルトの名無しさん
2011/08/11(木) 16:09:14.91お前こそ何がしたいんだよ。
「VBAでクラスライブラリを構築する」なんて概念こそがほぼ無いことだろ。
なんでわざわざ「ライブラリ」を付けて検索するんだよ。
VBAで.NETのクラスライブラリを使うことができることを考慮して検索すると、
vba "クラスライブラリ" -.NET
約 18,700 件 (0.34 秒)
しかも、1ページ目のほとんどが他言語のクラスライブラリの話だ。
> そもそも何でそれを検索したんだ?クラス=オブジェクト指向なのか?本当に?
この流れでそれがわからないとか、馬鹿なの?
0142デフォルトの名無しさん
2011/08/11(木) 16:26:28.99VBAでクラスを使うことが異端であると言いたいんだと思うよ。
きっとクラスを使ったことないんだよ。
便利な場面で使えばいいだけのことなのにね。
使ったことないから、いつ便利なのかわかんないんだろうけど。
0143デフォルトの名無しさん
2011/08/11(木) 16:45:26.55そもそもクラスはエクセルのセル、というかエクセルのブックがクラスなんだから、
それを最大限に生かせばいいだけの話。
エクセルのセル内容をほとんど使わないアプリとかは知らん。
クラス=オブジェクト指向
よりも、
エクセル=オブジェクト指向
という結びつきのほうが強い
バグは置いておいてくれ。これを言い出すとキリがないからな
なんにしろ普通は
データベース、特にアクセス(更に言えば普通は専用システム)でvbaを使い、データ整理
エクセルでデータを引っ張り出し、vbaでレイアウトの整理、出力
が基本
0144デフォルトの名無しさん
2011/08/11(木) 16:50:49.240145デフォルトの名無しさん
2011/08/11(木) 16:51:25.37わざわざC++と比べてるんだから、異端か異端でないかじゃなくて、
他の言語と比べて一般的かってことだろ。
大体検索結果なんてものによって分母も違ってなんの参考にもならんのに、
ドヤ顔で結果を貼り付けるて、挙句意図も説明しないから、
結局訳が分からなくなる。
意見があるなら、それをまずちゃんと日本語で書くべき。
0146デフォルトの名無しさん
2011/08/11(木) 16:54:34.680147デフォルトの名無しさん
2011/08/11(木) 16:58:04.39VBAのクラスはただの構造体+メソッドだろ。多態もできないと言い切れるレベルなのに、オブジェクト指向って・・・()笑
あっ、もちろんこれは俺の中ではこうだって話だから、皆さんはそれぞれ自分の中のVBA像を語ってください><
0148デフォルトの名無しさん
2011/08/11(木) 17:18:24.07こんなこと結構するけど。
Class1.cls:
Private WithEvents m_sheet As Worksheet
Public Sub SetWorkSheet(ByRef aSheet As Worksheet)
Set m_sheet = aSheet
End Sub
Private Sub m_sheet_Change(ByVal Target As Range)
MsgBox m_sheet.Name & "!" & Target.Address & " was changed"
End Sub
ThisWorkbook:
Private m_sheets As New Collection
Private Sub Workbook_Open()
Dim obj As Class1
Dim aSheet As Worksheet
For Each aSheet In Worksheets
Set obj = New Class1
obj.SetWorkSheet aSheet
m_sheets.Add obj
Next
End Sub
0149デフォルトの名無しさん
2011/08/11(木) 17:23:39.40あと、多態に関しては、例えばこのページとか。
http://zebratch.blog.so-net.ne.jp/2009-04-14-1
それと、こんなページとか。
http://www.objectclub.jp/community/memorial/homepage3.nifty.com/masarl/article/excel-decorator.html
軽くググっただけだから、もっと良いページがあるかも。
0150デフォルトの名無しさん
2011/08/11(木) 17:48:15.78以下のソースで (1)はなんら問題なく動作しますが、(2)はExcelファイル起動にRSSからの更新データ読み込み更新の有無のダイアログ表示後「更新する」ボタンをクリックして継続すると
実行時エラー13:型が一致しません と出て処理がとります。
VBAから再度実行すると普通に動きます。
考えたのですが問題点がよくわかりません。
(1)
For Each myRange In Range("d12:d21")
If myRange.Value = Range("b2") Then
Beep
End If
Next
(2)
For Each myRange In Range("b2:b11")
If myRange.Value = Range("h23").Value Then
Beep
End If
Next myRange
対象となるセルはすべて、数値としてあります。
セルh23に固定値が入っています。
0151デフォルトの名無しさん
2011/08/11(木) 17:49:26.62いきなりファビョりだす奴と行動が似てる
0152デフォルトの名無しさん
2011/08/11(木) 17:55:27.53がんばってるなぁ、でも馬鹿みたいとしか思えない。
ボケ防止に趣味でやってるなら止めはしないけど。
0153デフォルトの名無しさん
2011/08/11(木) 18:00:07.66もったいないなぁ
0154デフォルトの名無しさん
2011/08/11(木) 18:03:32.380155デフォルトの名無しさん
2011/08/11(木) 18:07:03.76同じ構造のシートで数十シート(可変)以上あるようなBookを読み込んで、
それぞれのシートに同じ処理を適用するような場合を思いつかない?
まあ、後は普通にクラスで実装した方が楽な場合は使うよ。
クラスなしにVBA用のxUnit実装してとか言われたら発狂もの。
0156デフォルトの名無しさん
2011/08/11(木) 18:07:23.96なるほど!>>154さんは中卒なのですね(泣)
月収は16万ぐらいなのでしょう・・・
お互い大変ですけれども、頑張りましょう!
私も25万しかもらっていません(泣)
今年はボーナス無しです・・・
0157デフォルトの名無しさん
2011/08/11(木) 18:16:43.94あ、Javascriptでオブジェクト指向なんて、とか言い出すかw
0158デフォルトの名無しさん
2011/08/11(木) 18:23:19.98>それぞれのシートに同じ処理を適用するような場合を思いつかない?
そんなもん別に VBA でクラスなんぞ作らんでも作れるだろ?
まあ、がんばってクラス作ってくれてもいいんだけどね。
Excel 自体はそりなりにクラス構造が作られてるから普通に利用すりゃいいだけで、
VBA でクラス作らないといけないわけじゃない。
なので、>>153 とか何言ってるのか意味わからん。
ちなみにそれなりの機能を持つアプリで入出力が Excel の場合、最近は >>154 が
言うように C# で Excel 呼び出す方向に「逃げる」ようにしている。
でも、 Javascript だと、ちょっと嫌かも (w
0159150
2011/08/11(木) 18:30:23.35ファイルを開いた瞬間は各セルの値は #N/A でアサインされていないので、アサインされてから比較するようにしたらうまくいきました。
お騒がせしました。
0160デフォルトの名無しさん
2011/08/11(木) 18:41:45.57A2の値を別ブックのシート2にコピー・・・・・・
このようなマクロを作りたいのですが
Worksheet(変数).Selectのところでうまくいきません
0161デフォルトの名無しさん
2011/08/11(木) 18:45:03.120162デフォルトの名無しさん
2011/08/11(木) 19:04:34.89終了時にファイルに適当に記録するにしても、一発でチェックボックスの
状態の読み書きが出来るとかそんなのない?
0163デフォルトの名無しさん
2011/08/11(木) 20:14:41.08Dim P As Integer
For P = 1 To 100
Workbooks("XXX.xls").Activate
Range(Cells(1, P), Cells(500, P)).Copy
Workbooks("YYY.xls").Activate
Worksheets(P).Range("D1").Select
Selection.PasteSpecial Paste:=xlValues
Next P
RangeクラスのSelectメソッドが失敗しました
0164デフォルトの名無しさん
2011/08/11(木) 20:25:11.71で、xをsheetsのimdexのように使う用法ってまさかないんですか?
あるはずだよね?
どうやるの?
万一ないなら、代替えとしてどうやってbookを操作するの?
0165デフォルトの名無しさん
2011/08/11(木) 20:46:05.29もしかして
"YYY.xls"へ 非表示のワークシートがあったりしない?
非表示のワークシートもにもインデックス番号がついてるから
それをSelect すると"RangeクラスのSelectメソッドが失敗しました" になるけど
0166デフォルトの名無しさん
2011/08/11(木) 21:31:16.94Worksheets(P).Select
Range("D1").Select
0167デフォルトの名無しさん
2011/08/11(木) 22:53:34.64できました。ありがとうございます。
どこかのサイトにSelectはあまり使わないほうが良いと書いてあったのですが
繋げるのとSelectで分けるのとどう違うのでしょうか
0168デフォルトの名無しさん
2011/08/12(金) 00:02:19.88Worksheets(P).Range("D1").Select
このコードはあくまで セルをSelect しようとしてるんであって
Worksheets(P)を Selectしている訳ではありません
Selectされていないシートの セルをSelectしようとしているので
エラーになる(ううむ ややこしい)
0169デフォルトの名無しさん
2011/08/12(金) 00:18:08.400170デフォルトの名無しさん
2011/08/12(金) 00:22:09.640171デフォルトの名無しさん
2011/08/12(金) 00:41:31.34そもそも質問してるだけだ。
0172デフォルトの名無しさん
2011/08/12(金) 00:45:54.22EXCELが全てクラスで構成されている事なんか知らないんだろうな。
標準モジュールですらスタティックエリアに展開される静的なシングルトンのクラスだと言うのに。
それらの使い方や作り方をおざなりにすると言うことはアジャイル開発なんて全く念頭にないな。
そんな奴が作ったプログラムの改修作業に入る人は悲惨だな。
0173デフォルトの名無しさん
2011/08/12(金) 01:12:41.490174デフォルトの名無しさん
2011/08/12(金) 06:08:16.29>>172
半分くらいは言ってること正しいんだが、"クラス"の捉え方次第では的外れな主張になる
君が言ってるのは、プログラム言語一般でのクラス、でもここはVBAスレなので
VBAのクラスとして捉えると、標準モジュールどころかシートモジュールさえもクラスでは無いと定義される
特定言語でのコミュニティー(掲示板や開発チームなど)に入ったときに、その言語特有の概念や定義を理解せず
プログラム言語一般論で語り出しちゃう奴は何処に行っても疎まれ、チームでは役に立たず掲示板ではウザがられるだけ
そんな奴と一緒にチーム開発させられる人が居るとすれば悲惨だな
0175デフォルトの名無しさん
2011/08/12(金) 06:21:30.460176デフォルトの名無しさん
2011/08/12(金) 08:20:54.19悪いがそんな受け捉え方なんてもので実際の本質が変わる様なあやふやなものでは無い。
持論を持ち出すのは結構だが、実際にそいつらの本質がクラスであるのは変わり様のない事実。
そして開発チームどうのと言う以前の問題。使われているのはそう言った性質を持ったアプリケーションなんだからな。
そう言ったウチの開発チームでは、とか、俺的には、とかそう言う細かい本質から離れたプライオリティの低い話を
あたかも本質として扱おうと言うのは「既に私の話は破綻していますよ」と言っている様なものだ。
そして、そう言った知識レベルの低いチームが一般的で無い組み方をしたプログラムを後に他のチームが改修に入り、
その時にはどう言う意図でそう組んだのか誰も分からなくなるなんてざらにある事。
要するに一般的な事の前に持論が来ちゃってるんだよな。
三流の下っ端プログラマとして終わりたく無ければもっと外にも目を向けるべきだな。
0177デフォルトの名無しさん
2011/08/12(金) 08:27:06.160178デフォルトの名無しさん
2011/08/12(金) 08:39:45.460179デフォルトの名無しさん
2011/08/12(金) 08:59:15.34お前らが三流なのはよく解った
プログラマ板にでも行け
0180デフォルトの名無しさん
2011/08/12(金) 09:39:55.09> そんなもん別に VBA でクラスなんぞ作らんでも作れるだろ?
じゃ、クラス使わずに>>148と同等の処理ができるコード示して。
> まあ、がんばってクラス作ってくれてもいいんだけどね。
がんばって、というのがよくわからないんだけど。>>148のどこががんばってる?
> ちなみにそれなりの機能を持つアプリで入出力が Excel の場合、最近は >>154 が
> 言うように C# で Excel 呼び出す方向に「逃げる」ようにしている。
永続化の手段としてExcel Bookを使う場合の話?
俺が話してるのは、UIの手段としてExcel Bookを使う場合なんだが。
0181デフォルトの名無しさん
2011/08/12(金) 09:43:37.53Hide時の位置に表示させたいのですがどうしたらいいですか
0182デフォルトの名無しさん
2011/08/12(金) 09:50:03.14http://www42.atwiki.jp/syugyou?cmd=upload&act=open&pageid=240&file=syk.html
0183デフォルトの名無しさん
2011/08/12(金) 11:08:42.36>じゃ、クラス使わずに>>148と同等の処理ができるコード示して。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox Sh.Name & "!" & Target.Address & " was changed"
End Sub
> >>148のどこががんばってる?
がんばってると言うか、はっきり言えばアホみたい。
>俺が話してるのは、UIの手段としてExcel Bookを使う場合なんだが。
C# からでも Excel の UI 制御できるよ。
君にできるかどうかは知らんけど。
0184デフォルトの名無しさん
2011/08/12(金) 11:51:37.310185デフォルトの名無しさん
2011/08/12(金) 11:53:39.99うーん、そのコードを同等と言うならしょうがないね。もういいよ。
> C# からでも Excel の UI 制御できるよ。
UIを制御するんじゃなくて、UIとしてExcel Bookを使う場合なんだけど。
まあ「がんばって」C#でExcelのUI制御でもしてれば。
0186デフォルトの名無しさん
2011/08/12(金) 11:56:00.74頑なに使おうとしないんだからもう平行線だね。
どこぞのstatic親父と似た匂いがする。
0187デフォルトの名無しさん
2011/08/12(金) 12:08:03.82Me.Top と Me.Left の値をどこかに保存しておいて
Showする時に戻すとか ちなみにその時に
Me.StartUpPosition = 0
じゃないと位置変更されないと思う
0188デフォルトの名無しさん
2011/08/12(金) 14:21:11.20誰かやれよ
0189デフォルトの名無しさん
2011/08/12(金) 15:29:42.61> Me.StartUpPosition = 0
> じゃないと位置変更されないと思う
これでした。
ありがとうございました。
0190デフォルトの名無しさん
2011/08/12(金) 15:30:51.560191デフォルトの名無しさん
2011/08/12(金) 15:45:51.74ある1つのボタンだけvbaからのクリック動作を3回に1回くらいしか受け付けてくれません。
ググって見たら WM_COMMAND を使うようなページが幾つか見つかったんですが動作しません。
Call SendMessage(hnd_A_Button, WM_LBUTTONDOWN, 0, ByVal 0)
Call SendMessage(hnd_A_Button, WM_LBUTTONUP, 0, ByVal 0)
こんな感じでボタンをクリックしていたのですが、1つのボタンだけ素直に受けつてくれません。
ググッたページを見て
Call SendMessage(hnd_OYA_Window, WM_COMMAND, BN_CLICKED * &H10000 + GetDlgCtrlID(hnd_A_Button), ByVal hnd_A_Button)
こんな風にしたのですが反応しません。
ハンドルはスパイソフトで確認して間違えないのは確認しています。
何が間違えているのでしょうか?
よろしくお願いします。
0192デフォルトの名無しさん
2011/08/12(金) 18:19:48.11>うーん、そのコードを同等と言うならしょうがないね。もういいよ。
え゛っ、どこか違うか?
違うなら、違いを示してくれよ。
>UIを制御するんじゃなくて、UIとしてExcel Bookを使う場合なんだけど。
プロパティもイベントも普通に使えるから UI として Excel 使う上で何の
問題もないわけだが。
まあ別に君に使えと言うわけじゃないから安心しなよ。
>>186
「クラスを使うと便利な場面がある」なら使えばいいと思うよ。
でも少なくとも、自信満々で出してきた >>148 なんて、わざわざクラス
使って20行近く書くよりより3行書く方が楽だと思わないか?
思わないとしたら、平行線でもしょうがないと思うけどね。
0193デフォルトの名無しさん
2011/08/12(金) 18:21:13.53Visual Bacik for Apprikation になると思われ。
0194デフォルトの名無しさん
2011/08/12(金) 18:42:36.43なんか卑猥だな> Exsel
0195デフォルトの名無しさん
2011/08/12(金) 18:42:42.340196デフォルトの名無しさん
2011/08/12(金) 21:07:00.46もしかして同一人物がずっと粘着してるのかな?
0197デフォルトの名無しさん
2011/08/12(金) 21:13:21.350198デフォルトの名無しさん
2011/08/12(金) 21:21:52.86お願いします。
0199デフォルトの名無しさん
2011/08/12(金) 21:43:37.230200デフォルトの名無しさん
2011/08/13(土) 01:55:13.14バカは言い過ぎ
新しいことが受け付けられない
お年寄りになっただけ
0201デフォルトの名無しさん
2011/08/13(土) 03:10:36.69質問者の態度でかいしお礼も言えない子が多いからね
0202デフォルトの名無しさん
2011/08/13(土) 03:28:42.55まぁこういうゴミクズに礼を言う必要はないからなw
0203デフォルトの名無しさん
2011/08/13(土) 03:38:19.540204デフォルトの名無しさん
2011/08/13(土) 03:48:46.42w
0205デフォルトの名無しさん
2011/08/13(土) 05:37:25.29童貞のお前には聞いてない
0206デフォルトの名無しさん
2011/08/13(土) 07:25:52.36>新しいことが受け付けられない
>お年寄りになっただけ
進歩の止まった VBA ってお年より向け言語だろ?
ひょっとして、VBA のクラス使いこなしてる俺すげーと思ってる >>148 さんですか?
0207デフォルトの名無しさん
2011/08/13(土) 07:34:06.55生きるうえで礼儀大切だよ粗末にしてると本物のゴミクズになっちゃうよ
0208デフォルトの名無しさん
2011/08/13(土) 08:20:51.73切符の券売機でよくまごついてるなあ
0209デフォルトの名無しさん
2011/08/13(土) 08:32:36.54窓口に行って駅員に売って貰えばいいだろ
0210デフォルトの名無しさん
2011/08/13(土) 09:00:58.80おまいらナイス!
実に素晴らしい例え方だわw
券売機(クラス)が使える普通の人は券売機でさっさと買って行ってしまえばいいし、
使えないおじいちゃんは窓口で買えばいいわな。
0211デフォルトの名無しさん
2011/08/13(土) 10:06:21.91クラス使えるとスゲーなんて発想になるのは君だけじゃない?
ここにいるほとんどの人は、使えるけど状況に応じてあえて使わないだけだと思うよ。
0212デフォルトの名無しさん
2011/08/13(土) 10:56:01.54券売機クラスってwwwせめて関数程度だろwww
0213デフォルトの名無しさん
2011/08/13(土) 11:11:04.19↑の例えでいくと人か機械かどっちかのインターフェースがあって、その下に発券のシステムがあるイメージ?
でも発券のシステムって、入力と出力が一対一だろ、ファイルに全対応を書き出しておいて検索しても十分だ。
特に好んでクラス使う例にはなりそうに無いな。
0214デフォルトの名無しさん
2011/08/13(土) 11:36:52.17不特定多数の敵や弾を、その種類毎にクラス作っておいて、
発生する時にインスタンスをぽこぽこ作って、コンストラクタで最初の位置を設定して、
後はコレクションに格納して、インターフェース使ってポリモーフィズムでそれぞれの敵や弾毎に別れた処理をぐるぐる回す。
らくちんw
0215デフォルトの名無しさん
2011/08/13(土) 11:38:16.43>券売機(クラス)が使える普通の人は券売機でさっさと買って行ってしまえばいいし、
こんなぼろい券売機もどきでなに言ってるんだ?
>>211
日本語ぐらいちゃんと読めよ...。
0216デフォルトの名無しさん
2011/08/13(土) 11:41:03.00>コンストラクタで最初の位置を設定して、
引数ももてないコンストラクタでどうやって設定したのか kwsk
0217デフォルトの名無しさん
2011/08/13(土) 11:59:43.60えっ?
0218デフォルトの名無しさん
2011/08/13(土) 12:03:25.85御老体向けの券売機もどきも使いこなせない人っていったい・・・
0219デフォルトの名無しさん
2011/08/13(土) 12:54:47.270220デフォルトの名無しさん
2011/08/13(土) 15:08:52.91満足とか意味不明。
無い機能は使えないし
ある機能は使えば便利な時に使うだけ。
君、自己満足の為にVBAでプログラミングしてるんだ。いい身分だねw
0221デフォルトの名無しさん
2011/08/13(土) 16:54:43.79>無い機能は使えないし
>ある機能は使えば便利な時に使うだけ。
それを「「御老体向けの券売機もどき」で満足してる」って言うんだけど...、
日本語不自由な人なのか?
俺は、機能がなくて不満なときは C# に逃げるけどね。
0222デフォルトの名無しさん
2011/08/13(土) 18:18:13.81あれぇ?
VS2010はプロフェッショナル以上のエディションなら直接EXCEL2010を.Net環境から開発出来るよねぇ。
古いのでやってるの?それともお金が無いの?
で、C#に逃げるって、それもクラス設計しないで作ってるの?
クラス図から直接コードに落とす機能も有ったりするのに?
それともやっぱりお金が無くて.NetFreamWorkだけ突っ込んでテキストファイルで一生懸命書いてコンパイルしてたりするの?w
ひょっとして、テスト環境とか作ったりリファクタリングする機能があるのも知らないんじゃないの?
俺はC#もVB.Netもやってるけど、スレ違いになるからわざわざ言わなかったのに。
そんなスレ違いの方向に持って行って何がしたいの?
0223デフォルトの名無しさん
2011/08/13(土) 19:02:39.030224デフォルトの名無しさん
2011/08/13(土) 19:07:39.810225デフォルトの名無しさん
2011/08/13(土) 19:13:03.58突かれたらお金の自慢されたとかw
どうなの?古い環境や低いエディションで満足出来てるの?w
0226デフォルトの名無しさん
2011/08/13(土) 19:34:39.360227デフォルトの名無しさん
2011/08/13(土) 20:11:25.26What's the difference?
Every single annoying person is a NEET.
0228デフォルトの名無しさん
2011/08/13(土) 20:25:51.850229222
2011/08/13(土) 21:29:01.63そんな質問は出て来ないだろうと言うことで、ろくすっぽ知らない事は分かってたんだ。
>>215と>>216はそのレスのタイムスタンプから同一人物である可能性が極めて高いと判断した。
そして>>221でC#に逃げるとか言ってたから、ちょっと意地悪してみたくなったんだ。
ちょっと大人気なかったな。そこは素直に謝らせて貰う。済まんかった。
0230デフォルトの名無しさん
2011/08/13(土) 21:40:15.07一応 Professional は買ってもらってるけど、仲間内で使うちょっとしたツール作るだけに、Ultimate
(定価 160万) は、買えないよ。Office アプリは本職じゃないしね。
>そんなスレ違いの方向に持って行って何がしたいの?
いや今頃言われても...。
>>158 で2日も前に書いてるし、>>180〜 あたりの話は理解できなかったのかなぁ。
0231デフォルトの名無しさん
2011/08/13(土) 22:23:21.74で、いつから VBA のコンストラクタにパラメータが指定できるようになったの?
0232222
2011/08/13(土) 22:30:34.31そこで会話を交わしているのは俺じゃないし、実は>>214も俺じゃない。
ま、信じるかどうかはそちらに任せるけど、
今そっちのレスを読み返してみたけど、どっちも本当は互いの言いたい事分かっててあえて意固地になって
戦ってる様にしか見えないぞ。
後、余計なお世話かもしれないが金が無いならWindoswPhoneの環境を見ると、あれはまだBetaだがまだ日本語の本も出てないくらい本気で最新だ。
開発環境も無料だしな。データベースとのやり取りを行う時SQLを使う事もないし、
基本UIの項目から直接値を取る様な事もしない。
構造化言語からObject指向言語に移行した時に味わった苦しみを次はObject指向を開発している人達が近々味わうだろうと
思わせる一品だ。
スレチだからこの辺にしとくわ。じゃあな。
0234デフォルトの名無しさん
2011/08/13(土) 23:36:20.56> データベースとのやり取りを行う時SQLを使う事もないし、
笑うところ?
まさか、Uiltimate で C# とか VB.net 使ってて、Linq 知らないなんてことはないよねぇ?
>>233
はぁ、関数? なにそれ。
まじで、さっぱりわからんから詳しく教えてくれ。
0235デフォルトの名無しさん
2011/08/14(日) 00:09:42.10なんだ、LINQを知っているのに>>233みたいなのは知らんのか。
覚える順序が滅茶苦茶だな。なんか胡散臭いなあ。
LINQを使うと言う事は既にObject指向の範疇から外れているものなのは知っているよな。
で、LINQを使うと言う事は他にも色々知っていなければ出来ない訳だが、それらの内Object指向の範疇で無いものに
どんなものが有るのか、どんな働きをするものなのか教えてくれよ。
後、そこまで豪語するなら「基本UIの範疇から直接値を使う事もしない」って言うのも当然知っている訳で、
本当は>>233見たいなのも知ってて言ってるんだよなぁ先生。じゃなきゃそこまで豪語出来ないもんなぁ。
おっと、スレチ過ぎだな。じゃあC#板で待ってるからとっとと来て説明してくれよ。
0236デフォルトの名無しさん
2011/08/14(日) 00:11:32.150237デフォルトの名無しさん
2011/08/14(日) 00:26:33.26Linq の話なんてどうでもいいから、>>216 に答えてくれよ。
0238デフォルトの名無しさん
2011/08/14(日) 00:34:36.470239デフォルトの名無しさん
2011/08/14(日) 00:39:46.09悪いがそこまで言われればどうでもいい訳には行かないなぁ先生。
あれだけ豪語してくれたんだから取り敢えず話を聞かせてくれないと
こっちも話す気になんかなれないのは分かるだろ?
説明してくれるのか、それとも本当にハッタリ君だったのか先にはっきりさせてくれ。
丁度いいスレ見つけたんだ。
【VB.NET】LINQ友の会【C#, C♯, C#】
http://hibari.2ch.net/test/read.cgi/tech/1202568694/
もうこれ以上このスレに迷惑掛ける訳にもいかないのも分かるよな?
じゃあ待ってるから
0240デフォルトの名無しさん
2011/08/14(日) 01:00:55.51豪語?
「MS」「SQL 使わない」「 C#/VB.net」とキーワードがあれば、"Linq" ぐらいは
知識としてあるだろ。
Windows Phone でも C# で Linq 使えるのは当たり前で、わざわざ言うほどの
ことじゃないはずだから指摘しただけ。
俺は SQL 書けるから、Linq なんて使ったことないし興味もない。
> もうこれ以上このスレに迷惑掛ける訳にもいかないのも分かるよな?
>>216 は、VBA の話なのでここで答えてくれていいよ。
0241デフォルトの名無しさん
2011/08/14(日) 01:56:39.96君、面白い事いうね。
>「MS」「SQL 使わない」「 C#/VB.net」とキーワードがあれば、"Linq" ぐらいは
>知識としてあるだろ。
平たく言うと、そのキーワードで今ググったって事だよね?
そう言うのは知識とは言わないよね。
で何、
>笑うところ?
>まさか、Uiltimate で C# とか VB.net 使ってて、Linq 知らないなんてことはないよねぇ?
何でLINQとエディションが関係有るのか説明して欲しいな。それと
Uiltimate?何でUiltimateだと思ったのかな?
>一応 Professional は買ってもらってるけど、仲間内で使うちょっとしたツール作るだけに、Ultimate
>(定価 160万) は、買えないよ。Office アプリは本職じゃないしね。
本当にProfessionalを持っているなら>>222で挙げた機能は、実は全て入ってる事知ってる筈だけど。おかしいねぇ。
MSDNのページででも調べちゃったのかな?
君はハッタリ君な上に嘘付きなのかな?
これらの事から言える結論は、君はC#やった事が有るとは到底俺には思え無いんだけど。
やっぱりちょっとC#のスレ来てちょこっとC#やってたってのを証明出来る様なコード書いて俺を納得させてくれよ。
逃げ回ってばかりでこのスレに迷惑掛け続ける訳にもいかないだろ?
0242デフォルトの名無しさん
2011/08/14(日) 01:56:56.26ここは質問スレだ
0243デフォルトの名無しさん
2011/08/14(日) 02:02:02.74外でやると言ってる訳だが、ハッタリ君が逃げ回って拒絶しているんだニンニン
0244デフォルトの名無しさん
2011/08/14(日) 02:22:30.34だったら放置しろ屑
弱いもの虐めすんなって小学校で教わらなかったのか
0245デフォルトの名無しさん
2011/08/14(日) 02:47:07.540246デフォルトの名無しさん
2011/08/14(日) 03:00:54.19> 本当にProfessionalを持っているなら>>222で挙げた機能は、実は全て入ってる事知ってる筈だけど。
本当におかしいねぇ、俺が使ってる Pro. には、「クラス図から直接コードに落とす機能」なんてないんだけど。
君の Ultimate にはあるんでしょ? Ultimate しかないしねぇ、その機能。
0247デフォルトの名無しさん
2011/08/14(日) 03:13:54.76ごめん、ハッタリ君な上に嘘付きで MSDN のページも調べられない情弱を虐めてしまった。
>>222 で、あまりにもアホなこと書いてるから、ついつい遊んでしまった。(w
>>234 の Ultimate にも、食いついてくれるし、言うことのないアホっぷりだったから、
さすがにもう出てこれない思うけどね。
# よくよく見たら、Ultimate の綴りが所々間違ってるな...。
0248デフォルトの名無しさん
2011/08/14(日) 03:44:44.150249デフォルトの名無しさん
2011/08/14(日) 04:05:43.18以後、ずっと負け犬ハッタリ君のレッテルは貼られ続けられるなw
0250デフォルトの名無しさん
2011/08/14(日) 04:45:04.690251デフォルトの名無しさん
2011/08/14(日) 07:40:24.33あれ? >>246 にはレスしないの?
まあさすがにできないよな、Visual Studio の比較ページ見たらすぐわかることだし。
> 以後、ずっと負け犬ハッタリ君のレッテルは貼られ続けられるなw
自己紹介乙。
あっ、情弱ハッタリ君のほうがいいんじゃないかな (pgr
0252デフォルトの名無しさん
2011/08/14(日) 11:14:56.400253デフォルトの名無しさん
2011/08/14(日) 11:46:50.670254デフォルトの名無しさん
2011/08/14(日) 14:47:48.460255デフォルトの名無しさん
2011/08/14(日) 15:24:56.86>>247
>>251
忍者ハッタリ君 今日も大嘘ハッタリがバレるの巻
ttp://iup.2ch-library.com/i/i0391455-1313301826.jpg
ttp://iup.2ch-library.com/i/i0391454-1313301826.jpg
ttp://iup.2ch-library.com/i/i0391453-1313301826.jpg
さて、もう心残りはないだろう。
大嘘付きながら散々逃げ回ってこのスレに迷惑掛けた事をみんなに謝って
とっととC#スレに来い。
次回予告
今度はC#やってないのがバレちゃったよの巻
0256デフォルトの名無しさん
2011/08/14(日) 15:47:33.010257デフォルトの名無しさん
2011/08/14(日) 16:03:42.720258デフォルトの名無しさん
2011/08/14(日) 16:13:02.170259デフォルトの名無しさん
2011/08/14(日) 17:45:24.740260デフォルトの名無しさん
2011/08/14(日) 18:29:47.530261デフォルトの名無しさん
2011/08/14(日) 20:08:08.40まだやってたのか
お前のせいで
自殺者が出るんじゃないか?
今となっては>>251が痛々しいな
0262デフォルトの名無しさん
2011/08/14(日) 21:25:57.02それのどこにXMLを使うんだ?
0263デフォルトの名無しさん
2011/08/14(日) 22:29:03.73すごいな、この人。
> テキストファイルで一生懸命書いてコンパイルしてたりするの?
なんて豪語しながら、いまさらクラスダイアグラムを出してきたよ。
クラスダイアログラムだと、ロジック部はどうしてるのかなぁ?
当然テキストで一生懸命書いてないんだよね。まあ、書くほどのロジックがないのかな (w
# クラスダイアグラムは使ってるバージョン管理システムと相性悪いからマジで忘れてたわ。
# コード生成といってもクラス定義だけだから、たいして効率あがらないし。
# そもそもいまさら UML 以外でクラス図ってどうよ。
0264デフォルトの名無しさん
2011/08/14(日) 22:31:53.74お前もうやめといたら?
見苦しいしただの恥の上塗りだよ。
0265デフォルトの名無しさん
2011/08/14(日) 22:34:11.43> 散々逃げ回って
あれ? 散々逃げ回ってるのは、君でしょ?
>>216 の回答を書いてくれないかなぁ、VBA のスレなんだからみんなの役に立つと思うよ。
あと C# スレに来て欲しけりゃ、向こうでネタ振っとけ。
>>257
XML って、msxml のこと言ってるのか?
であれば、
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaXMLHTTP.html
とかかな。
0266デフォルトの名無しさん
2011/08/14(日) 22:46:09.53だね。オブジェクト指向言語はクラスの設計がキモで、基本となる所の
ひとつひとつのメソッドのロジックはそんなに長くなるもんじゃないし、
長く作る人はへたっぴだってJavaやってる先輩に聞いた事がある。
0267デフォルトの名無しさん
2011/08/14(日) 22:56:12.36世間から見たら、俺なんか中の下か下の上くらいなのに
ここにはその下しか居ない
0268デフォルトの名無しさん
2011/08/14(日) 23:06:39.57ネタむこうで振ったら向こうの人が先に答えたりするし、
ネタ振ってもまたググって適当に答えられてのらりくらりと逃げられても意味ないでしょ?
だから前から言ってる>>241の通りでいいよハッタリ君。
どんどんボロが出て来るし、スレ違いでみんなに迷惑掛けるし、引き際も知らないし、本当に見苦しいねw
0269デフォルトの名無しさん
2011/08/14(日) 23:10:46.13うわぁ・・・
ハッタリもここまで来るとネタでもキモいね
0270デフォルトの名無しさん
2011/08/14(日) 23:29:11.67上のバージョンだとクラス図の中にロジック部分のコードが書けたりするのか?
前からクラス図からコードが落とせるかってことが論点だったと思ってたから、
違ってるなら何で今頃と思ったんだが・・・
横槍ごめんな
0271デフォルトの名無しさん
2011/08/14(日) 23:30:46.10はいはい、短いからどうしたの?
書かないといけないのは変わらないだろ。
はぐらかしたい気持ちはわかるけど、それこそ「見苦しいしただの恥の上塗りだよ。」 (w
0272デフォルトの名無しさん
2011/08/14(日) 23:43:35.43>ネタむこうで振ったら向こうの人が先に答えたりするし、
>ネタ振ってもまたググって適当に答えられてのらりくらりと逃げられても意味ないでしょ?
結局どうしろと?
>だから前から言ってる>>241の通りでいいよハッタリ君。
>> 証明出来る様なコード書いて俺を納得させてくれよ。
書いても、ググったって言って、納得しないだろ?
そもそも C# の話なんてこのスレではどうでもいいから、>>216 に答えてよ。
それとも、まだ逃げ回るの?
0273デフォルトの名無しさん
2011/08/14(日) 23:44:44.10申し訳ない、俺も Ultimate は触ったことないので、実際のところはよくわからない。
ただ、今評価している IBM Rational Rhapsody なんかだと、クラス図 / 状態遷移図 から、
その状態遷移を実現するコードを自動生成できるし、そのコードがシーケンス図通り動くか
を検証できたりするので、Visual Studio でもそれに近いことはできるとのではないかと思う。
ソフトの種別によるけど、うちの会社がやっているような用途だと、ロジックの多くを状態遷
移図で表現できるので、それなりの効果が見込めると踏んでいる。
なお、細かいコードは、その状態遷移図の中に人手でのコーディングが必要。
0274デフォルトの名無しさん
2011/08/14(日) 23:53:32.52C#の話は元々、君がVBAから逃げる時に使うと言う話から起因しているからね。
いつもやってる通り普通に書いて
納得させてくれればいいんじゃないか?
>>272
>書いても、ググったって言って、納得しないだろ?
それは前科が有るから仕方ないよね。
0275デフォルトの名無しさん
2011/08/14(日) 23:58:52.74自慢げに連呼してたからなw
0276デフォルトの名無しさん
2011/08/15(月) 00:17:19.23ttp://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=D9AE78D9-9DC6-4B38-9FA6-2C745A175AED
をインストールしてもらえばカレンダー機能が使えるようになるの?
0277デフォルトの名無しさん
2011/08/15(月) 00:17:57.06>いつもやってる通り普通に書いて
>納得させてくれればいいんじゃないか?
>>書いても、ググったって言って、納得しないだろ?
>それは前科が有るから仕方ないよね。
前科? はぁ、どこのことを言ってるのかレス番具体的に示してくれ。
あと、なんで C# の話はぐだぐだ書くのに、VBA の話である >>216 は無視するの?
>>275
>>247 に間違えたって書いてるんだから、許してくれよ。
0278デフォルトの名無しさん
2011/08/15(月) 00:27:16.52>>「MS」「SQL 使わない」「 C#/VB.net」とキーワードがあれば、"Linq" ぐらいは
>>知識としてあるだろ。
>平たく言うと、そのキーワードで今ググったって事だよね?
>そう言うのは知識とは言わないよね。
そう、知りもしないのにあんな豪語垂れてた訳だから、
ちゃんとC#で作ってるって証明してくれないとそれ以上の話はする気がしないと
前にも書いただろ?
記憶力無いの?
0279デフォルトの名無しさん
2011/08/15(月) 00:53:29.07>そう、知りもしないのにあんな豪語垂れてた訳だから、
C# で DB 使う奴なら、Linq の概要ぐらいいちいちググらなくても知ってると思ってたけど、
キーワードって書くと Google しか思いつかない奴もいることを学んだよ。(w
# て言うか、こんなことで人を前科者呼ばわりか。相変わらずすげー奴だな。
>ちゃんとC#で作ってるって証明してくれないとそれ以上の話はする気がしないと
だから、そんなお前に証明しようがないだろ?
できないこと言い続けて、>>216 をごまかす気なの?
0280デフォルトの名無しさん
2011/08/15(月) 01:04:05.56馬鹿が二匹しかいないからこそ、齟齬なく相互認識できるんだろうけど
0281デフォルトの名無しさん
2011/08/15(月) 01:05:35.52はぁ・・未成年はネット禁止にするべきだって気持ち分かるわ・・
0282デフォルトの名無しさん
2011/08/15(月) 01:08:35.16>>232の前に事前にそのキーワードを出してましたってかwエスパーかよw
ほんっと見苦しいよな。
VBAで出来ない事が有ったらC#に逃げてたんだろ?
だったらその様に普通に書いて証明すればいいって何度も言わせるなよ。ボケ老人かよ。
それで証明出来れば>>216の話をしようって言ってるだろ?君が逃げなければ話は進行するんだよ。
0283デフォルトの名無しさん
2011/08/15(月) 01:21:25.92>だったらその様に普通に書いて証明すればいいって何度も言わせるなよ。
書いたらぐぐったというだけだろ?
それこそ何回も言わせるな。
>それで証明出来れば>>216の話をしようって言ってるだろ?
もういいよ、証明できないことを要求して、逃げるんだろ。
まあ、VBA のコンストラクタ (Class_Initialize) にパラメータを持てないことも知らずに、
VBA のクラス使いこなしてるなんて恥ずかしくて答えられないわな。
0284デフォルトの名無しさん
2011/08/15(月) 01:22:23.85できなくてC#でできることって
どんなことがあるんだろ
0285デフォルトの名無しさん
2011/08/15(月) 01:24:02.26何だ、結局逃げたな
さすがハッタリ君だ
0286デフォルトの名無しさん
2011/08/15(月) 01:28:53.16VBAからも.NET FrameWorkの機能呼び出せるしな
0287デフォルトの名無しさん
2011/08/15(月) 01:54:32.96クラスに関して言えば、>>135 にも書いたけど、VBA のクラスは...
> 継承とコンストラクタにパラメータが渡せないのがきついからなぁ。
と思う。
言語仕様的には、Generic / 例外 とかかな。
>>285
はいはい、>>214 のハッタリにはかなわないけどね。(pgr
0288デフォルトの名無しさん
2011/08/15(月) 02:48:56.94死ねキチガイ
0289デフォルトの名無しさん
2011/08/15(月) 02:54:23.06msxmlのことでした
そのページのはソースを変数に格納してるんだけどそうじゃなくて
もうmsxmlじゃなくてもいいので
webページ丸ごとダウンロードして同じ階層ににあるhtってフォルダの中に保存したいです
拡張子はなんでも
0290デフォルトの名無しさん
2011/08/15(月) 07:51:31.60>そのページのはソースを変数に格納してるんだけどそうじゃなくて
変数の内容をファイルに格納することもできないレベルなのか... orz
>webページ丸ごと
Web ページって複数のファイルから構成されてることは知ってる?
msxml でなくてもいいなら、IE でやればいいんじないかな。
http://oshiete.goo.ne.jp/qa/4253824.html
0291デフォルトの名無しさん
2011/08/15(月) 08:34:29.400292デフォルトの名無しさん
2011/08/15(月) 08:44:25.87本当にそんな大したことやってるわけじゃないんだけど、
来てみたら何でこんなに話が大きくなってるんだ?
俺、そんな変なこと書いたかな・・・。
>>233の人の
「その関数自体の引数で渡せないなら他にどんな渡し方がある?」
って言うフレーズから、この人との認識とは一致してるっぽいけど
ごめん、ヘタレだから怖くて答えられないやw
>>233の人には答えてもらって、俺の作りが変じゃないっていって欲しいけどね。
0293デフォルトの名無しさん
2011/08/15(月) 09:28:11.88<textarea name="thread_msg" rows="5" style="width:98%" cols="5000"></textarea>
ってのがフォーム部分のソースで
objIE.Document.all("thread_msg").Value = "入力するコメント"
って記述したら始めの2,3回はちゃんと動いたんだけど
その後に送信ボタンを押す記述を加えたらエラーで動かなくなって
追加した送信ボタンを押す記述を削除してもエラーで動かなくなっちまった。
そもそも記述が間違ってる?
0294デフォルトの名無しさん
2011/08/15(月) 09:46:21.00普通に実行すると送れないってどういう事?
0295デフォルトの名無しさん
2011/08/15(月) 09:52:20.75始めはちゃんとフォームに文字がセットされたのに、今は何故かエラーで動かず。
0296デフォルトの名無しさん
2011/08/15(月) 09:58:06.35なんなんだ
0297デフォルトの名無しさん
2011/08/15(月) 10:31:00.12なんかIEを再起動したらエラーが解決する事が分かったわ
起動済みIEを発見する記述に問題があったっぽい
スレ汚してすいませんでした
0298デフォルトの名無しさん
2011/08/15(月) 13:50:54.41大したことやってないし、認識も一致してるっぽいのに
具 体 的 に は な に も 書 か な い
もういいよ。
0299デフォルトの名無しさん
2011/08/15(月) 15:09:13.180300デフォルトの名無しさん
2011/08/15(月) 16:12:34.85多態性(もどき)が使えることとかをメリットとしては見てないの?
0301デフォルトの名無しさん
2011/08/15(月) 16:37:07.49そのメリットを必要としていなければ、クラスも必要ないって話になるのでは?
0302デフォルトの名無しさん
2011/08/15(月) 16:37:28.22>クラス必要無いって人がいるみたいだけど、
そんなやついたっけ?
0303デフォルトの名無しさん
2011/08/15(月) 16:45:05.32ん、いないの?
詳しく読むのだるいので、ざっと読んで「クラスいらん」って人がいたと思ったので。
0304デフォルトの名無しさん
2011/08/15(月) 16:49:12.46> 俺は必要ないとは思わないけど、そのメリットを認識していても
> そのメリットを必要としていなければ、クラスも必要ないって話になるのでは?
え、そういう話だったの?
ただ単に自分がそのメリットを享受できるようなコンテキストに出会ってないだけって事か。
0305デフォルトの名無しさん
2011/08/15(月) 17:41:54.74vbaはエクセルに対してはメソッド程度の存在だからな
ただそれをどこまで理解しているかだな
0306デフォルトの名無しさん
2011/08/15(月) 18:01:18.110307デフォルトの名無しさん
2011/08/15(月) 18:06:58.07> vbaはエクセルに対してはメソッド程度の存在だからな
そう?
上の方で出てきたのと似てるけど、VBAのクラスはEvent発行者になれたりする。
VB6でも同じ事ができて、かなり強力(いまだにVB6改造案件がかなりある)。
0308デフォルトの名無しさん
2011/08/15(月) 18:19:46.94木構造とか、グラフ構造とか、スタックとかでもクラスのが楽。
0309305
2011/08/15(月) 19:50:50.78個人的にはあやまり、とは言いたくないです。私もお世話になった。
>>307
vb6は何だかんだでキュ雨力、でも嫌われれた
羨ましシイ
>>308
ベッの言語使ったほうがいいんじゃねか
0310デフォルトの名無しさん
2011/08/15(月) 20:08:20.61SendMessageの後にDoEventsとか入れてみたら?
SendMessageはメッセージュキューに積まないからそれでいけるか微妙だけど
0311デフォルトの名無しさん
2011/08/15(月) 20:11:45.960312デフォルトの名無しさん
2011/08/15(月) 20:31:16.99Excel上のデータ管理するならDictionaryは必須だと思うけど
なんであるもの使わないかな
車輪の再発明好きか
バグ入り込みやすいし周りはやめて欲しいと思ってるんじゃない?
個人的にはTypeより使い勝手いいと思う
くだらない喧嘩でレス消費するのやめて本題の質問応答に戻ろう
ここはそういうスレだよ
0313デフォルトの名無しさん
2011/08/15(月) 20:35:54.37しへぇ
0314デフォルトの名無しさん
2011/08/15(月) 21:06:48.89>くだらない喧嘩でレス消費するのやめて
くだらない持論を披露するスレでもないよ。
0315デフォルトの名無しさん
2011/08/15(月) 21:33:47.79どういうクラス作ってるの?
Dictionaryとかはエクセルで実装してる範囲内では使ってるけど
わざわざクラスは作るまでもない
0316デフォルトの名無しさん
2011/08/15(月) 21:35:31.650317デフォルトの名無しさん
2011/08/15(月) 21:43:24.06できるとこはできるみたいなんだからもったいない。
0318317
2011/08/15(月) 21:44:06.490319デフォルトの名無しさん
2011/08/15(月) 21:47:36.22wordって一回書式作ったらそうそう変えること無いしなぁ
むしろどういうふうに活用してるか教えて欲しい
0320デフォルトの名無しさん
2011/08/15(月) 21:51:03.84写真が大量(100以上)あって、
それを文章とともに作ってる書類がある。
文章を追加すると当然レイアウトがくずれる。
しかし例え文章を追加してもレイアウトを自動的に調整してくれるマクロが欲しい。
0321デフォルトの名無しさん
2011/08/15(月) 22:05:13.82くずれる、の崩れるがなぁ
100ぐらいなら手作業のほうが早いんじゃないかっていう
0322デフォルトの名無しさん
2011/08/15(月) 22:10:31.460323デフォルトの名無しさん
2011/08/15(月) 22:19:28.930324デフォルトの名無しさん
2011/08/15(月) 22:23:27.48どこのブラックの上司だよ・・・
あれはちょっとトラウマだった
0325デフォルトの名無しさん
2011/08/15(月) 22:43:53.37Dim server As String, ita As String, dat As String
Dim hdate As Variant
Dim y As Integer
Range("A:A").Clear
Set http = CreateObject("MSXML2.XMLHTTP")
server = "hibari.2ch.net"
ita = "tech"
dat = "1312435844"
http.Open "GET", "http://bg20.2ch.net/test/r.so/" & server & "/" & ita & "/" & dat & "/", False
http.Send
hdate = StrConv(http.ResponseBody, vbUnicode)
sry = Split(hdate, vbLf)
y = 1
For i = 0 To UBound(sry)
Cells(y, 1) = sry(i)
y = y + 1
Next i
Set http = Nothing
こんな感じにbg20.2ch.netからこのスレのdat?を取得してA列に表示する奴作ったんだけど
Excelを終了しないと取得したのが変わらない、どうしてだよ
0326デフォルトの名無しさん
2011/08/15(月) 22:45:12.810327デフォルトの名無しさん
2011/08/15(月) 23:15:57.33コード見てないけど、今朝鮮人のおかげでkamome鯖が落ちてる
鯖落ち対策とかしてるかの
0328デフォルトの名無しさん
2011/08/15(月) 23:47:53.75前から終了しないと最新のが取得できなかった
0329デフォルトの名無しさん
2011/08/15(月) 23:51:05.00リクエストの飛ばし方とか差分取得がさっぱりだわ
0330デフォルトの名無しさん
2011/08/16(火) 00:34:09.04すまねぇ、この板だったな
http.Open "GET", "http://hibari.2ch.net/tech/dat/1312435844.dat", False
これじゃだめか?
むしろbg20とかどこの鯖かよくわかんねんだけど
0331デフォルトの名無しさん
2011/08/16(火) 00:36:01.38http://info.2ch.net/wiki/index.php?monazilla%2Fdevelop%2Faccess
のrangeがどーたら
俺も大昔vb.netで2chブラウザ作ったことあるが、
通信部分はまるまるコピペだったな
差分取得も面倒で実装しなかった
bg20はバーボンに掛からないからやってたんだけどそれが原因だったか
ってかこの鯖どういう仕組みなんだよ、ブラウザで更新したらちゃんと取得できてるのに
0333デフォルトの名無しさん
2011/08/16(火) 01:19:39.14だと
短パンマン ★<><>2011/08/16 01:16:54 ID:TanpanM<>いろいろあるさ @bg r.so ver 2008/02/19<br>ERROR = 5656 <br>(e_mes = [888 buf=HTTP/1.1 302 Found]) <br> <>名古屋はエ〜エ〜で ♪
って返ってきてるね。302ってなんだっけ。なんでもいいや
>>326
ユニコードで半角スペースでいけたと思う
じゃなきゃ全角スペースが手っ取り早い
0334デフォルトの名無しさん
2011/08/16(火) 01:23:25.700335デフォルトの名無しさん
2011/08/16(火) 01:28:55.810336デフォルトの名無しさん
2011/08/16(火) 01:49:09.940337デフォルトの名無しさん
2011/08/16(火) 08:03:38.86なにが忍法帖だよこの野郎。
2chにどっぷりはまってそうでダサくてかっこ悪い。
0338デフォルトの名無しさん
2011/08/16(火) 10:58:32.330339デフォルトの名無しさん
2011/08/16(火) 11:42:25.84アドインにすれば配布できる。
0340デフォルトの名無しさん
2011/08/16(火) 11:43:45.59> ベッの言語使ったほうがいいんじゃねか
逆に聞くけど、木構造とかスタックとかが必要になったとき、態々別言語でそこだけ実装してんの?
0341デフォルトの名無しさん
2011/08/16(火) 12:45:05.71試しにマクロの記録で作ったコードを見たら
' の注釈文の中に使用キーが書いてあったから
そこで設定するのかと思ったら
実はこれはあくまでも注釈であり
ここを変えても反映されないし自分が作成したマクロにそう書いても使用できない。
なので実際はわれわれの目に見えないところで
ショートカットキーが登録されているよう思われる。
どうやるの?
0342デフォルトの名無しさん
2011/08/16(火) 13:19:13.11Alt+F8->Option
0343デフォルトの名無しさん
2011/08/16(火) 15:21:24.64エクスポートすれば、アドインにしなくても単独で配布できる
つーか、アドインはVBAのファイル(モジュール)の単独配布では無いだろw
0344デフォルトの名無しさん
2011/08/16(火) 15:26:20.250345デフォルトの名無しさん
2011/08/16(火) 17:22:27.91俺だけの持論てことはもしかして>>314は
「単価、製造元」の情報を「製品名」をキーとして連想配列したい場合
自分で連想配列を実装しちゃうって事?効率悪すぎね?
俺なら
Public 単価 As Long
Public 製造元 As String
だけ定義したデータクラス作って商品名をキーにしてDictionaryに入れちゃうけど
0346デフォルトの名無しさん
2011/08/16(火) 17:29:11.530347デフォルトの名無しさん
2011/08/16(火) 17:30:28.590348デフォルトの名無しさん
2011/08/16(火) 17:41:04.670349デフォルトの名無しさん
2011/08/16(火) 17:45:04.480350デフォルトの名無しさん
2011/08/16(火) 17:50:18.920351デフォルトの名無しさん
2011/08/16(火) 18:09:15.89一方、>>349はワークシートに書き込んでVLOOKUPした
0352デフォルトの名無しさん
2011/08/16(火) 18:14:54.74>>350
0353デフォルトの名無しさん
2011/08/16(火) 18:16:19.40実にくだらん。
0354デフォルトの名無しさん
2011/08/16(火) 18:20:55.270355デフォルトの名無しさん
2011/08/16(火) 19:45:20.590356デフォルトの名無しさん
2011/08/16(火) 20:18:28.03Sub a()
If Range("A1") = "あ" Or Range("A1") = "い" Then
MsgBox ("a")
Else
End If
End Sub
と、if文でorを使い複数条件を指定する時
If Range("A1") = "あ" Or "い" Then
では型が一致しません、と出てエラーになります。
いちいちRange("A1")を指定しないと駄目なのでしょうか?
0357デフォルトの名無しさん
2011/08/16(火) 20:26:32.45演算子の優先順位が理由
0358デフォルトの名無しさん
2011/08/16(火) 20:31:28.11Else
End If
これelseいらなくね?
0359デフォルトの名無しさん
2011/08/16(火) 20:50:17.34Range("B1") = Range("A1")
ってやったら#VALUE!ってセルに表示されて代入された値も#VALUE!なんですけどなんでですかね
0360デフォルトの名無しさん
2011/08/16(火) 20:54:07.88なんでこれ省略したらいかんのかね
0361デフォルトの名無しさん
2011/08/16(火) 20:58:42.330362デフォルトの名無しさん
2011/08/16(火) 21:00:39.900363デフォルトの名無しさん
2011/08/16(火) 21:49:54.94エラー2015
0364デフォルトの名無しさん
2011/08/16(火) 22:23:45.24>>314 ... 理由は >>353
0365デフォルトの名無しさん
2011/08/16(火) 22:43:40.460366デフォルトの名無しさん
2011/08/16(火) 22:50:45.26クラス使わないって言ったやつにこういう場合はクラス使うだろって例出しただけなんだけど
ケースバイケースなんて当然だろ
お前ずっとクラス使わないって豪語してるヤツだろ
攻撃されて悔しいからって重箱の隅突こうとして外しまくりで自分で空しくならない?
0367デフォルトの名無しさん
2011/08/16(火) 23:01:56.75動作不良は起きにくいんでしょうか?
VC++からはタイプライブラリとか使用せずShellExecuteで
Excelを立ち上げる処理だけして後の処理はVBAに
任せるみたいな方法はver違い克服に有効?
0368デフォルトの名無しさん
2011/08/16(火) 23:09:22.39それと解放忘れでExcelプロセスがゾンビ化したりもあるからVC++等で使用する場合は注意が必要ですね。
やっぱりExcel+VBAでやった方が親和性的にもよろしいかと。
0369デフォルトの名無しさん
2011/08/16(火) 23:27:21.98その内ILとか出て来そうな勢いだな
0370デフォルトの名無しさん
2011/08/16(火) 23:35:21.22VBAで株価データを取ってくるなんて作業なら毎日やってる
0371デフォルトの名無しさん
2011/08/16(火) 23:54:51.70やりかたおしえて
0372デフォルトの名無しさん
2011/08/17(水) 01:07:56.12>クラス使わないって言ったやつに
そんなやついたか?
勝手に敵作って一人相撲乙。
0373デフォルトの名無しさん
2011/08/17(水) 01:28:42.84m9(^д^)
0374デフォルトの名無しさん
2011/08/17(水) 05:12:05.81「クラスを意地でも使わないやつがいる!」
と脳内変換することで防衛機制を発動しているのです
0375デフォルトの名無しさん
2011/08/17(水) 06:22:30.96分かりやす
0376デフォルトの名無しさん
2011/08/17(水) 07:29:20.370377デフォルトの名無しさん
2011/08/17(水) 08:47:36.440378デフォルトの名無しさん
2011/08/17(水) 10:56:08.06そもそも何で例なんか必要なんだ?
教えてもらわないとわからないのか?
お前、C#とかC++やJavaでクラス抽出できないの?
0379デフォルトの名無しさん
2011/08/17(水) 11:01:25.80VBAのクラスの生成コストがどんなもんか知らないけど、良く利用している人の感覚からすると速度ってどんなもんなの?
ケースバイケースなんだろうが、DBを毛嫌いする理由もないよな。Excelからじゃ使いにくいって考えかもしれないけど。
0380デフォルトの名無しさん
2011/08/17(水) 11:06:58.87もはや支離滅裂。
言いたいこと整理しろよ。
0381デフォルトの名無しさん
2011/08/17(水) 11:34:13.66なんでDBの話が出てくるのかわからないけど、木構造が必要になったときとかにクラスでデータ構造を
表現すると便利だよねって例がわからない?
0382デフォルトの名無しさん
2011/08/17(水) 11:37:28.38あ、それとDictionaryが便利なのは、ハッシュ構造だからだよ。
0383デフォルトの名無しさん
2011/08/17(水) 12:22:02.83いいかげん連投レスがうざいんでコテつけてくれないか>>380-382
0384デフォルトの名無しさん
2011/08/17(水) 12:41:18.53NGするから
0385デフォルトの名無しさん
2011/08/17(水) 13:08:05.08みんなは、お前一人が暴れてると思ってるよ。
0386デフォルトの名無しさん
2011/08/17(水) 17:58:45.76Gが空白ならそのまま、何か入っていればA~Gを水色に染める
ってどうなりますか?
0387デフォルトの名無しさん
2011/08/17(水) 18:26:47.72VBAじゃなくても、条件付書式ではどうですか?
0388デフォルトの名無しさん
2011/08/17(水) 18:31:18.93それでも大丈夫だと思います!
やり方わかりませんが・・・
0389デフォルトの名無しさん
2011/08/17(水) 18:47:55.75その枠だけは色を変えれる様になりました
ありがとうございます
0390デフォルトの名無しさん
2011/08/17(水) 19:17:11.01Excel総合相談所 97
http://hibari.2ch.net/test/read.cgi/bsoft/1304307841/l50
で質問することをお勧めします。ついでに、他のセルの内容で条件付書式を設定するには
http://turedure.cocolog-nifty.com/log/2008/06/excel_e3d1.html あたりを参考にどうぞ
0391390
2011/08/17(水) 19:20:32.36Excel総合相談所 98
http://hibari.2ch.net/test/read.cgi/bsoft/1312896741/l50
0392デフォルトの名無しさん
2011/08/17(水) 19:45:32.27誘導から何からありがとうございます
0393デフォルトの名無しさん
2011/08/17(水) 23:08:33.70ブックをセーブする時に時々
「共有違反のため保存されませんでした」
というエラーが出ました
ググッたら
校閲→ブックの共有→複数のユーザーによる同時編集と、ブックの結合を許可する
にチェックを入れればいいというのが見つかったので、そうしました。
それでいまのとこ「共有違反のため保存されませんでした」は出てません。
そしたら、今まで何年も問題無く使えてた自作のマクロを使おうとした時に
「このコマンドは、共有ファイルで実行することはできません」
と出て使えないんです。
で、ググッたら
「複数のユーザーが同時に編集する(ブックを結合する)」のチェックを外せばいい
という事でした。
結局どっちかを諦めるしかないんでしょうか?
0394デフォルトの名無しさん
2011/08/17(水) 23:21:36.320395デフォルトの名無しさん
2011/08/17(水) 23:26:34.280396デフォルトの名無しさん
2011/08/18(木) 00:29:45.08共有を外すっていうのはどうすればいいんですか?
0397デフォルトの名無しさん
2011/08/18(木) 01:24:48.930399デフォルトの名無しさん
2011/08/18(木) 01:37:56.65>校閲→ブックの共有→複数のユーザーによる同時編集と、ブックの結合を許可する
>にチェックを入れればいいというのが見つかったので、そうしました。
まずこれ対処間違ってるから
Officeのバグなので「時々」出るくらいならそのままパッチを待ちましょう
0400393
2011/08/18(木) 02:10:59.63はい。ググった時にもバグという記述があって、とりあえずこれでいけるって書いてあったのでそうしてました。
これ間違ってたんですね。チェックはずします。
セーブ失敗するのは、たまになのでこのまま使います。
ありがとう。
0401デフォルトの名無しさん
2011/08/18(木) 22:35:08.450402デフォルトの名無しさん
2011/08/18(木) 22:36:40.860403デフォルトの名無しさん
2011/08/18(木) 22:36:50.250404デフォルトの名無しさん
2011/08/19(金) 00:10:45.97これをメモ帳の形式(つまり拡張子txt)で文書として保存するには
どういうVBAを書けばいいでしょうか?
0405デフォルトの名無しさん
2011/08/19(金) 00:14:26.26WordのVBAって、マクロの自動記録の機能を使って研究しようと思ったら
マウスカーソルの下にテープのような小アイコンが出てきて
マクロに記録したい「右クリックで使用できる機能」や「文字を選択する機能」などが全く使えないじゃないか。
そのため研究すらできやしない。
これはどういうこと?
そもそもこれじゃなにも記録できないから自動記録の意味がないじゃん。
0406デフォルトの名無しさん
2011/08/19(金) 01:25:03.160407デフォルトの名無しさん
2011/08/19(金) 01:39:55.52とりあえずマクロの記録
名前を付けて保存でテキスト選んで保存してみれ
0408デフォルトの名無しさん
2011/08/19(金) 01:44:57.730409デフォルトの名無しさん
2011/08/20(土) 10:38:38.73関数なら
=SUMPRODUCT((EXACT(A1:A100,A100))*1)
と書く場合を
VBAで書くにはどうしたら良いのでしょうか?
(Application.WorksheetFunction.SumProductの使い方?)
.Formulaに関数を書くのではなく直接求める方法を教えて下さい。
よろしくお願いします。
OSはXP、EXCELのバージョンは2003です。
0410デフォルトの名無しさん
2011/08/20(土) 16:04:49.67これのやり方お願いします
0411デフォルトの名無しさん
2011/08/20(土) 17:30:56.91If ActiveCell.Column = 2 Then
ActiveCell.Value = "◯"
End If
0412デフォルトの名無しさん
2011/08/20(土) 17:33:04.12後でColumnとかを知るよな
0413デフォルトの名無しさん
2011/08/20(土) 19:17:31.90どうも
0414デフォルトの名無しさん
2011/08/20(土) 20:29:27.11それを別の1つのセルに入れたいんだけど
この場合はどの関数を使うの?
0415デフォルトの名無しさん
2011/08/20(土) 21:02:24.48CONCATENATE 関数だけど普通使わないかなぁ
& で いけるから
0416413
2011/08/20(土) 21:10:35.86=A1&A2&A3
程度ならいいけど
=A1&B1&C1&D1&E1&F1&G1&H1&I1&J1&K1&L1&M1&N1&O1&P1&Q1&R1&S1&T1&U1&V1&・・・・
とどんどん続く場合は?
0417デフォルトの名無しさん
2011/08/20(土) 21:24:16.91VBA 使うしかないみたい。
http://www.relief.jp/itnote/archives/001342.php
0418デフォルトの名無しさん
2011/08/20(土) 21:27:39.63>>2を256回読めば答えが出ると思うよ。
0419デフォルトの名無しさん
2011/08/20(土) 21:33:05.07str = str & Cells(1,n)
Next n
cells(2,1).Value = str
こんな感じじゃいかんのか?
0420デフォルトの名無しさん
2011/08/20(土) 21:36:22.54頑張ってVBAなんて使わなくてもできるだろ。
0421デフォルトの名無しさん
2011/08/20(土) 21:36:48.270422デフォルトの名無しさん
2011/08/20(土) 21:42:05.90当たり前だろ。全部答え乗せる馬鹿いるかよw
0423デフォルトの名無しさん
2011/08/20(土) 21:46:27.05Dim n As Object
Dim x As String
For Each n In myRng
x = x & n.Value
Next n
link = x
End Function
これ標準フォームに貼ってセルには
=link(範囲)
これで連結されるはず
0424デフォルトの名無しさん
2011/08/20(土) 22:15:10.90指定したフォルダ内の全ファイルのファイル名を
A列に1列にならべるにはどうすればいいですか?
0425デフォルトの名無しさん
2011/08/20(土) 22:18:49.34つ>>2
0426デフォルトの名無しさん
2011/08/20(土) 22:40:34.21A列に1列にならべるにはどうすればいい?
0427デフォルトの名無しさん
2011/08/20(土) 22:49:45.48VBAで書けば出来るよw
0428デフォルトの名無しさん
2011/08/20(土) 22:51:17.75ここ見て理解できなかったらあきらめたほうがいい
0429デフォルトの名無しさん
2011/08/20(土) 22:53:16.29cd 指定フォルダ
dir /a-d /b > temp.txt
temp.txt を Excel で読む。
0430デフォルトの名無しさん
2011/08/20(土) 23:25:37.00変数は、値渡し、参照渡し、矢切りの渡し、
どれをメインに使っていくのが得策でしょうか?
0431430
2011/08/20(土) 23:26:40.370432デフォルトの名無しさん
2011/08/20(土) 23:54:40.60ケースバイケース
>>431
スコープは可能な限り狭い方がいい。
人が理解できる範囲は限られているから。
0433デフォルトの名無しさん
2011/08/20(土) 23:58:05.20変数の値渡し、参照渡し、矢切の渡しは用途に応じて使い分けるもんでしょ。
ユーザインターフェースに関係ないところは全てローカル変数なんじゃないの?
因みにC言語には参照渡しなんて無いから。
これ以上はスレチになるんでやめとく。
0434デフォルトの名無しさん
2011/08/21(日) 00:33:43.61グローバル変数よりも、モジュール変数、できればローカル変数で。
可能なら値渡しをつかう。
0435デフォルトの名無しさん
2011/08/21(日) 08:03:41.750436デフォルトの名無しさん
2011/08/21(日) 10:15:16.510437デフォルトの名無しさん
2011/08/21(日) 10:26:31.54とおっしゃいますと、矢切とは江戸川のこと?
0438 忍法帖【Lv=1,xxxP】
2011/08/21(日) 22:15:27.68Cells(3, i).Select
ActiveCell.FormulaR1C1 = "=RC[-52] - RC[-6]"
RC[-6]を絶対パスにはせずに固定する方法ってありますか?
0439デフォルトの名無しさん
2011/08/22(月) 01:35:02.070440デフォルトの名無しさん
2011/08/22(月) 01:36:19.740441 忍法帖【Lv=1,xxxP】
2011/08/22(月) 03:08:35.67変数を使って書き直してみたんですがダメでした。最後のセルだけちゃんとなってたんですが
Cells(3, i).FormulaR1C1 = "=RC[-52] - RC[" & -変数 & "]"
>>439わざわざ貼ってもらってありがとうございます。でも解決できなかったです。
あと>>438のアンカーはミスです;
0442デフォルトの名無しさん
2011/08/22(月) 07:04:40.08>>439だと固定にするには[]を外せば絶対参照になるって書いてある。
何でそのようになっていない?
0443デフォルトの名無しさん
2011/08/22(月) 07:26:33.630444デフォルトの名無しさん
2011/08/22(月) 14:43:54.88なんで絶対参照でダメなのか解らんが
相対参照でやりたいなら、自分で目的セルまでの相対的な位置を計算すればいいんじゃね
0445デフォルトの名無しさん
2011/08/22(月) 16:53:12.320446デフォルトの名無しさん
2011/08/22(月) 16:55:54.88Workbook_SheetActivateで切り替え
0447デフォルトの名無しさん
2011/08/22(月) 17:02:41.38わからないんでちょっとだけ書いてもらえませんか?
0448デフォルトの名無しさん
2011/08/22(月) 17:31:54.08特定のシートから他のシートを参照していたりするケースを考えると、無理じゃね?
0449デフォルトの名無しさん
2011/08/23(火) 14:29:20.37bookの設定を手動計算にして、VBAで再計算させるときSheet1以外を再計算させる方法ありますか?
0450デフォルトの名無しさん
2011/08/23(火) 18:50:37.73なぜ、一部のシートだけ自動再計算を止めたいの?
値を変えたくなかったら、コピーして値貼り付けすればいいんじゃないの?
0451デフォルトの名無しさん
2011/08/23(火) 19:25:23.670452デフォルトの名無しさん
2011/08/23(火) 19:27:10.840454デフォルトの名無しさん
2011/08/23(火) 23:39:41.78ttp://www.publickey1.jp/blog/11/officejavascript.html
0455デフォルトの名無しさん
2011/08/24(水) 00:37:46.73なぜそれを聞く必要があった?
0456デフォルトの名無しさん
2011/08/24(水) 01:08:27.65お前もな
はいキリがないからこれで終わり
0457デフォルトの名無しさん
2011/08/24(水) 10:03:13.70iniファイルが無い状態で実行した時は、オプションボタンAのValueをTrueに、オプションボタンBの
ValueをFalseにするようにしています。
この時オプションボタンAのチェックする所がグレーになってしまいます。
オプションボタンAのキャプション部分をクリックすればきちんと表示されます。
iniファイルから状態を読み込んだ時は正常に表示されます。
iniファイルが無い状態で起動させた時もグレーにさせないようにするにはどうしたらいいでしょうか?
iniファイルの読み込みは下記のように書いています。
RC = GetPrivateProfileString(FormData, "optionA", "Ture", buf, Len(buf), iniFile)
UserForm1.optionA.Value = Left$(buf, InStr(buf, vbNullChar) - 1)
RC = GetPrivateProfileString(FormData, "optionB", "False", buf, Len(buf), iniFile)
UserForm1.optionB.Value = Left$(buf, InStr(buf, vbNullChar) - 1)
0458デフォルトの名無しさん
2011/08/24(水) 10:40:34.430460デフォルトの名無しさん
2011/08/25(木) 20:50:14.60文書があります。
段落が50個くらいあります(Wordの定義の段落ではなく、世間一般の段落。)。
写真が200枚くらいあります。
写真は必ずどこかの段落に属していて、各段落は0個〜10個くらいの写真を支配下に置いてあります。
段落の文章は追加したり構成したりで、長くなったり短くなったりします。
そこでマクロの登場。
文章の長さが変わっても、自動で写真がレイアウトされるようなマクロは作れますか?
レイアウトは人工知能のように勝手に見た目よく配置されるような仕様にしたいです。
0461457
2011/08/25(木) 22:03:31.55オブジェクトインスペクタではチェックの状態はBool値になっているのでTrueとか書いたのですが。
0462デフォルトの名無しさん
2011/08/25(木) 22:31:07.28BoolはTrueかFalseしか値を取れない。
0,1はIntegerだから、2値以上扱う場合に使用できる。
簡単な例だけど、
関数の成功、失敗だけの返却値が欲しいのならBool。
関数の失敗を詳しく返すのであればIntegerにするとかかな。
0463デフォルトの名無しさん
2011/08/25(木) 23:10:22.22Word 捨てて、TeX とか DocBook とか使え。
0464デフォルトの名無しさん
2011/08/25(木) 23:12:44.66言ってることよく分からないけど解決してるんでもういいです。
0465デフォルトの名無しさん
2011/08/25(木) 23:42:31.77と上記のようにセルに式を入力したいのですが
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
と表示され上手くいきません。
この場合どのようにすれば上手くいきますか?
よろしくお願いします。
0466デフォルトの名無しさん
2011/08/25(木) 23:45:04.81見た目良くという仕様をまずは一意に解釈出来るように定義しよう。
それさえ出来れば後は作業に過ぎないし、それが出来ないなら話にならない。
0467デフォルトの名無しさん
2011/08/25(木) 23:50:16.58457の質問をよく嫁
0468デフォルトの名無しさん
2011/08/25(木) 23:52:30.30抜粋した記述なのか否か分からなかったけど、
Range("a1").Cells(1,1).Formula=〜
みたいに、Rangeオブジェクトにぶら下げる形で書いても駄目?
0469デフォルトの名無しさん
2011/08/26(金) 12:46:27.97* と 130 の間に半角のスペースがありますが、これのせい?
値段 という変数には何が入っているの?
0470デフォルトの名無しさん
2011/08/26(金) 12:46:35.33これ スペルミスだろ
X fomula
〇 Formula
0471デフォルトの名無しさん
2011/08/26(金) 14:02:33.980472デフォルトの名無しさん
2011/08/26(金) 16:48:19.93一気に書き換わっても追従する?
0473デフォルトの名無しさん
2011/08/26(金) 18:21:17.38なんで試さないの?
0474デフォルトの名無しさん
2011/08/26(金) 18:31:53.530475デフォルトの名無しさん
2011/08/26(金) 19:10:57.650476デフォルトの名無しさん
2011/08/26(金) 19:20:03.570477デフォルトの名無しさん
2011/08/26(金) 23:35:00.69Select Case c.Value
Case "1"
c.Interior.ColorIndex = 7
こんな感じでセルの値によって別のセルの値を入れるにはどうすればいいでしょうか。
置換だと時間がかかったのでこっちで処理したいのですが
c.value = cells(tate,yoko).value では動いてくれません。
0478デフォルトの名無しさん
2011/08/26(金) 23:46:47.96でいいと思うけど型違うとか?
0479デフォルトの名無しさん
2011/08/26(金) 23:47:40.73セルの値によって別のセルの値を代入すればいいんじゃね?
0480デフォルトの名無しさん
2011/08/26(金) 23:53:00.67Longではだめですか?
>>479
selectcaseを使わないでもっと簡単にできる方法がありましたら是非教えてください
0481デフォルトの名無しさん
2011/08/27(土) 00:20:43.790482デフォルトの名無しさん
2011/08/27(土) 06:40:27.93が動かないのではなく、条件分岐が不適切で、そもそもそのコードが実行すらされていないのでは?
>>481も言ってるが、「case 1」と「case "1"」は別物
セルに「1」と入れたら前者には一致するが、後者には一致しない
セルに「="1"」とか「'1」と入れたら後者に一致する
特定行のコードが実行されているか否かは、ステップ実行やブレイクポイントを使えば、
バカでも簡単に確認出来ることなので、PC初心者板ならまだしも、プログラム技術板に
来る奴がその程度の初歩的な確認すらしてないなんてことは無いと思いたいが
ここにも偶にプログラム技術板ではなくPC初心者板が相応しいようなバカが迷い込むからなぁ
因みに、Select CaseよりはIfの方が僅かに速いぞ
「簡単に」と簡単に言ってくれるが、「簡単」の定義を明確に書かないと、実行の簡単さ(速さ)なのか、
コードを書く上での簡単さ(コード量の少なさ)なのか、コードを読む上での簡単さ(可読性)なのか、
何を求めているのか解らないし、具体的な分岐条件も書かれていないのでは尚更答えようが無い
分岐条件によってはコピー元のセル行列を演算やChoose、Iif、Arrayなどを使って求め、条件分岐自体を
廃することも可能だが、不特定の条件に万能に対応出来る方法となるとIfとSelect Caseしか答えようがないからなぁ
0483デフォルトの名無しさん
2011/08/27(土) 08:43:13.000484デフォルトの名無しさん
2011/08/27(土) 09:44:33.740485デフォルトの名無しさん
2011/08/27(土) 12:10:39.070486デフォルトの名無しさん
2011/08/27(土) 15:29:57.23とりあえずはっきりした間違いだけ指摘しとく
>セルに「1」と入れたら前者には一致するが、後者には一致しない
これは間違い
暗黙の型変換によって両者に一致するぞ
仮にもVBAのスレッドにいるプログラム技術者が暗黙の型変換わからんとか言うなよ
0487デフォルトの名無しさん
2011/08/27(土) 22:25:06.14各要素の前後にLF改行を入れるため
Call AAA_node.appendChild(xmlDoc.createTextNode(vbLf))
としているのですが、作成されたXMLをEmEditorなどの改行コードを区別して表示できるエディタで確認すると
CRLFで改行されています。
XMLに出力される改行コードをLFにしたいのですがどうすればよいでしょうか?
0488デフォルトの名無しさん
2011/08/28(日) 00:12:31.540489デフォルトの名無しさん
2011/08/28(日) 00:38:33.56エディタ側で気を利かせて改行文字を勝手に変換してるオチは無い?
変換してるのが、エディタかVBAか切り分けるため、
ファイルのバイナリをチェックしてみては?
0490デフォルトの名無しさん
2011/08/28(日) 00:40:39.100491487
2011/08/28(日) 02:01:11.21Replace(text, vbCrLf, vbLf)して再度保存するという方法に逃げました。。
0492デフォルトの名無しさん
2011/08/28(日) 06:05:02.79バイナリエディタでチェックせずに対策しちゃったのか?
バイナリデータでどんな値が入っているか確認しないで結論出せるとは天才だな。
0493デフォルトの名無しさん
2011/08/28(日) 06:35:50.280494デフォルトの名無しさん
2011/08/28(日) 06:45:07.09セルのデータだからじゃないの?
セルの中の改行はLFだから。
0495デフォルトの名無しさん
2011/08/28(日) 09:30:56.34セルに =RSS|'9501.T'!現在値 (9501は東京電力の株価コード)と書くと東電の株価がセルに表示されます。
これをVBAで kabuka = RSS|'9501.T'!現在値みたいに直接扱うにはどうしたらいいでしょうか?
現在は Cells(1,1) = "=RSS|'9501.T'!現在値" みたいに一旦セルに記入させてから値を取得しています。
環境はXP、エクセルは2003です。
よろしくお願いします。
0496デフォルトの名無しさん
2011/08/28(日) 11:08:31.82「改行」を保存するんじゃなくて
「改行コード」のコードを保存したいなら、テキストで保存しちゃダメだな
>>495
そのアドオンの仕様がわからんので答えられません
楽天証券に聞いてください
0497デフォルトの名無しさん
2011/08/28(日) 11:44:23.070498495
2011/08/28(日) 12:37:48.350499デフォルトの名無しさん
2011/08/28(日) 14:58:36.68アドオンの関数使ってCalculateして値とればいいじゃない
0500デフォルトの名無しさん
2011/08/28(日) 16:13:07.78セルの内容をXMLファイルに吐き出すVBAを作ったことがある。
セルの内容をString型の変数に保存するだけで問題なくXMLに登録できたし、
XMLファイルから文字列として取り出しても普通に改行コードはそのままだったよ。
普通セルのデータならString型の変数に格納するんじゃないの?
テキストで保存っていうのはどこから出てきた話なのかな?
0501デフォルトの名無しさん
2011/08/28(日) 16:26:22.19ファイル書き出しについて、ファイル名に選択セル内の文字列を引用する場合はどのように書けばよいでしょうか?
選択セル内に"123"とあれば、123.txt を保存など
strFileName = "C:\temp\***.txt"
0502デフォルトの名無しさん
2011/08/28(日) 19:00:25.650503デフォルトの名無しさん
2011/08/28(日) 19:40:07.85>>487です。実際のところCRLFでもLFでも特に問題ないんですが
W3Cの勧告に以下のようにあるのでLFで保存しておいたほうが良いのかなと思ったんです。
http://www.y-adagio.com/public/standards/xml/xmlmain.htm#sec-line-ends
0504デフォルトの名無しさん
2011/08/28(日) 19:59:57.21そこをどう読んでもXMLファイルの改行コードはLFにすべきと読めないんだが。
0505デフォルトの名無しさん
2011/08/28(日) 20:25:27.860506デフォルトの名無しさん
2011/08/29(月) 00:13:41.77>>2を声を出して1億回読め。
お前のようなやつがいるから、小学生でも分かるような内容を質問してくるヤツがつけあがるんだろ。
>>505
本当に理解してるのか怪しいね。
どこをどう理解したんだ?
だれかが「LFにすべきだろ」と言い出したらどうするの?
0507デフォルトの名無しさん
2011/08/29(月) 00:47:35.930508デフォルトの名無しさん
2011/08/29(月) 06:17:18.03蒸し返されても仕方ない書き込みのほうが問題だろ。
0509デフォルトの名無しさん
2011/08/29(月) 07:05:13.520510デフォルトの名無しさん
2011/08/29(月) 07:29:28.950511デフォルトの名無しさん
2011/08/29(月) 14:03:26.48セルにキーボードから入力した場合はチェンジイベントが発生するのですが、
たとえばA1からA10までの集計をSUMでA11に表示する場合、A11ではイベントが発生しません。
セルの表面上の値が変わった時に発生するイベントを教えて下さい。
0512デフォルトの名無しさん
2011/08/29(月) 14:33:57.880513デフォルトの名無しさん
2011/08/29(月) 14:49:25.52A11 の値をどこかに覚えておいて、Calculate イベントで更新されたことを
見る方法しか思いつかない。
0514デフォルトの名無しさん
2011/08/29(月) 14:58:03.89ありがとうございます。
ググっていてcalculateイベントにたどり着きました。
それで、改めて質問をしたいのですが、
自分のやりたい事は、このcalculateイベントが起きたセルによって
処理を変えたいので、どこのセルで起きたかを知る方法です。
よろしくお願いします。
0515デフォルトの名無しさん
2011/08/29(月) 15:09:08.17513さんの言われるように監視用のシートを作ったりする必要が有るみたいです。
ありがとうございました。
0516デフォルトの名無しさん
2011/08/29(月) 16:43:31.33計算式にユーザ定義関数を使うってのは?
0517デフォルトの名無しさん
2011/08/29(月) 17:27:53.31ユーザー定義関数は今ググって調べました。
しかし、中身をどうすればいいかが分からないです。
せっかくレスくれたのに、申し訳ない。
0518デフォルトの名無しさん
2011/08/29(月) 17:39:37.92セル位置によってどう処理を変えたいのか詳しく説明すれば、
だれかが適切な内容を考えてくれるさ
0519デフォルトの名無しさん
2011/08/29(月) 17:48:03.17function hoge(a as nanka)
//shori
hoge = hage
end function
=hoge()
0520デフォルトの名無しさん
2011/08/29(月) 18:02:10.54レス、ありがとうございます。
お言葉に甘えて状況を書きます。
5枚のシートが有り、それぞれA列からE列、100行使います。
E1〜E100まではサーバーから勝手に数字が入ってきます。(この部分は業者が作ってくれた)
やりたい事なのですが、E1からE10、E11からE20と言う感じでグループとして、
どのグループのデータが変更されたかで、その変更されたグループに色を付けたいのです。
E1からE10のどれかが変更されたら赤、次にE41からE50が変わったら、赤を消してE41からE50を
赤(別の色でも良いですけど)みたいにしたいのです。
数字の合計がいくつ以上とかなら、calculateイベントの度に計算すればいいのですが、
どこが変わったのかなので>>514さんのレスのように何処かに記憶させて比較するしかないのかと
思いました。
よろしくお願いします。
0521デフォルトの名無しさん
2011/08/29(月) 18:02:41.83A11の【内容】は「=SUM(A1:A10)」であり、A1:A10に変更があってA11の【表示】が変わっても
A11の【内容】は「=SUM(A1:A10)」のまま変わらないのだから、
セルの【内容】が変更されたときに起こるChangeイベントがA11で発生しないのは当然のこと
しかし、A11の【表示】が変更されると言うことは、A11が参照しているA1:A10の【内容】が変更されて
いるわけだから、A1:A10側ではChangeイベントが発生する
つまり、A1:A10の【内容】変更を監視すれば、A11の【表示】変更を取得できるというわけだ
0522デフォルトの名無しさん
2011/08/29(月) 18:06:21.00リロードしていませんでした。
どう応用できるか、考えます。
ありがとうございます。
0523デフォルトの名無しさん
2011/08/29(月) 18:09:05.48> セルの【内容】が変更されたときに起こるChangeイベントがA11で発生しないのは当然のこと
すみません。
自分の知りたい事を強調しようと思って書いた例でした。
0524デフォルトの名無しさん
2011/08/29(月) 18:16:40.57それ、セルの値が変わったかどうかが問題で、計算式関係ないじゃないか
一番の解決方法は、E列を設定するその業者に、値が変わったら色変えてくださいって頼め
0525デフォルトの名無しさん
2011/08/29(月) 18:17:41.48ガ━━(゚Д゚;)━━━ン!!!!!
0526デフォルトの名無しさん
2011/08/29(月) 18:20:15.85>しかし、中身をどうすればいいかが分からないです。
>>511 の例だと、標準モジュールに
Public Function Hoge(R As Range) as Variant
MsgBox "A11 が変わったよ。"
A11 = Application.WorksheetFunction.Sum(R)
End Function
って書いといて、シートの A11 に "=Hoge(A1:A10)" と入力する。
0527デフォルトの名無しさん
2011/08/29(月) 18:23:01.49>E1〜E100まではサーバーから勝手に数字が入ってきます。(この部分は業者が作ってくれた)
Excel だよね?
ブックの共有でもやってるの?
0528デフォルトの名無しさん
2011/08/29(月) 18:34:48.82なるほど。
分かりました。応用できます。
>>527
サーバーとのやり取りをしています。
中身は分かりませんが、サーバーからデータを取ってきて数字によって
E列の何処かに値を書き込む感じです。
ありがとうございました。
0529デフォルトの名無しさん
2011/08/29(月) 18:54:42.37なんか関数を司ってる気がする
0530デフォルトの名無しさん
2011/08/29(月) 22:45:42.34もうすこしくわしくおしえてくださらんか?
0531デフォルトの名無しさん
2011/08/29(月) 23:51:12.20普段プログラミングしてない子?
0532デフォルトの名無しさん
2011/08/30(火) 00:16:25.640533デフォルトの名無しさん
2011/08/30(火) 03:11:35.590534デフォルトの名無しさん
2011/08/30(火) 07:21:30.310535デフォルトの名無しさん
2011/08/30(火) 08:44:25.56With Worksheets("MAIN")
If Dir(.Cells(2, 2), vbDirectory) = "" Then ←
MsgBox "指定したフォルダが見つかりません。"
Exit Sub
End If
End With
矢印の部分で「型が一致しません」って出るんですけどDir関数って
引数 pathname に指定した内容が見つからないときは、長さ 0 の文字列 (" ") を返します
ってヘルプにあるのにどうして?
0536デフォルトの名無しさん
2011/08/30(火) 08:51:18.360537デフォルトの名無しさん
2011/08/30(火) 09:04:59.23そちらの方だったのか。。。
Cells(2,2)には d:\test と書いておいたんで文字列だと思ってたんですけど
If Dir(CStr(.Cells(2, 2)), vbDirectory) = "" Then
と訂正しました
ありがとうございました
0538デフォルトの名無しさん
2011/08/30(火) 09:46:07.76これは?
0539デフォルトの名無しさん
2011/08/30(火) 18:13:47.19画像&オートシェイブ複数を グループ化した状態で
グループ内の 特定オートシェイブのテキストを変更したいと思い
以下のコードを書きましたが
実行時エラー '1004'
Characters クラスの Textプロパティを設定できません。
となってしまいます。
グループ化した状態では変更できないのでしょうか?
Dim CapText As String
Dim AddText As String
Dim ThisShape1 As Shape
AddText = "HogeHoge"
For Each ThisShape1 In ActiveSheet.Shapes("Target-Img2").GroupItems
If (ThisShape1.Type = msoAutoShape) And _
(ThisShape1.Name Like "*-[FB][BHP]-Frame") Then
CapText = ThisShape1.TextFrame.Characters.Text
CapText = CapText & "(" & AddText & ")"
ThisShape1.TextFrame.Characters.Text = CapText '<---ここでエラー
End If
Next
0540デフォルトの名無しさん
2011/08/30(火) 20:41:29.32SaveAsのFileFormatにはxlWorkbookNormalとxlExcel8のどちらを指定すればよいでしょうか?
どちらで試しても97-2003形式で正常に保存されているような気がします。
xlExcel8はExcel2003以前だとサポートされていないということは知っていますが、他に違いはあるのでしょうか?
0541デフォルトの名無しさん
2011/08/30(火) 20:59:17.01遅くなってすんませんでした。それでもOKでした。どうもm(_ _)m
0542デフォルトの名無しさん
2011/08/31(水) 00:19:16.41これグループ化した時点でShapeが書き換え不可になるんじゃないの?
0543539
2011/08/31(水) 01:41:31.87やはり書き換え不可になるのですかね
別の処理なんですが
特定Shapeを 非表示(Visible = False) には出来たので
テキストの変更もできそうだと思ったのですが.....
一旦グループ解除するしかないのかな
レスありがとうこざいました。
0544デフォルトの名無しさん
2011/08/31(水) 10:50:30.71プロシージャの引数でセルを1つだけの指定にさせるにはどうすればいいのでしょうか?
Rangeだと範囲が指定できてしまいますので、セル1つだけに制限したいのです。
Cellsってやったら怒られました。
0545デフォルトの名無しさん
2011/08/31(水) 11:12:16.83例えばこのページにある
http://www2.anzen.mofa.go.jp/info/pcmap.asp?id=125&infocode=2011T041&filetype=1&fileno=1
このような国の危険情報の画像
http://www.anzen.mofa.go.jp/attached2/2011T041_1.gif
を、このサイトに存在する世界の国の数だけ集めてExcelシートに貼り付けたいんです。
0546デフォルトの名無しさん
2011/08/31(水) 11:17:19.14型としてはRangeを引数で渡して、関数内でRows,Columns,Areasの
各Countが1以外ならエラー値を返すんじゃ駄目なの?
まぁ、Cellsを指定するとか言ってるなら、型を理解してるかどうかが怪しいが…
0547デフォルトの名無しさん
2011/08/31(水) 11:30:48.81了解しました。ありがとうございます。
0548デフォルトの名無しさん
2011/08/31(水) 12:12:34.00ところで、Cellsって昔はメソッドだった気がするんだが、いつのまにプロパティになったんだ?
0549デフォルトの名無しさん
2011/08/31(水) 14:40:17.39Public Hage(ABC As Range) As nantoka
If ABC.Value>0 Then
Range("A1").Value="0より大きい"
End If
End Function
みたいに関数内からシート等に働きかける事ってできませんか?
#Valueエラーが出てどうして良いか分かりません。
よろしくお願いします
0550デフォルトの名無しさん
2011/08/31(水) 14:50:19.630551デフォルトの名無しさん
2011/08/31(水) 15:06:43.560552デフォルトの名無しさん
2011/08/31(水) 15:26:11.700553549
2011/08/31(水) 16:36:59.89ワークシートチェンジに書くしかないようです。
このイベントなんですが、100カ所くらいのセルが
ランダムに書き換わって、当然何カ所かは同時に
書き換わるような場合、100回処理がきちんと行われるんでしょうか?
もしくは、そういう場合は最初のイベント処理の時に
イベントが発生しないようして、何個もプロシージャが
走らないようにした方が良いのでしょうか?
0554デフォルトの名無しさん
2011/08/31(水) 17:18:48.040555デフォルトの名無しさん
2011/08/31(水) 17:44:46.960556デフォルトの名無しさん
2011/08/31(水) 18:26:59.37>>520氏のような感じ。
うちは機械とシリアルでやり取りしてさせてるんだけど。
100台機械を繋げてる訳じゃなくて、シリアルのデータの中から
セル100個(おおざっぱな数字だけど)にデータを振り分けてる。
0557デフォルトの名無しさん
2011/08/31(水) 19:09:11.320558デフォルトの名無しさん
2011/08/31(水) 19:11:18.840559デフォルトの名無しさん
2011/08/31(水) 19:51:15.96PCの性能にもよるんだろうけど、どこまできっちりイベント処理してくれるのかな
0560デフォルトの名無しさん
2011/08/31(水) 23:43:31.02整数で二枚の各シートA,Bの2列に1から600までの整数がランダムに各列36万行入力
しています。シート1のA,B列の整数をシート2の整数A,Bと合致する行を検索するプログラムを
作ろうと思います。各シートの中の同じ組み合わせのA,Bは、2つありません。
そこで実際にシート1.2の各行を一つ一つ照らし合わせるプログラムを書いて見たが、実行すると
あまりにも計算する量が多くてパソコンが止まってしまいます。
そこで質問ですが、計算量を少なくするには、どのようなやり方がよいでしょうか?
0561デフォルトの名無しさん
2011/09/01(木) 00:13:25.630562デフォルトの名無しさん
2011/09/01(木) 00:25:26.70ひとつひとつ参照ってどんな風に書いてるの?
0563デフォルトの名無しさん
2011/09/01(木) 00:54:16.92取りこぼすと思ってるの?
0564デフォルトの名無しさん
2011/09/01(木) 09:04:09.44If sheet1.Cells(a, "A") = sheet2.Cells(b, "A") And _
sheet1.Cells(a, "B") = sheet2.Cells(b, "B") Then
Loop
a = a + 1
のようにFor文で一致する行を検索してます。
0565デフォルトの名無しさん
2011/09/01(木) 11:36:02.45APIを直接叩くプログラムだと、EXEファイルと挙動が違ったり
windowsにメッセージが行く時と行かない時があるから疑ってる
0566デフォルトの名無しさん
2011/09/01(木) 11:59:07.71シートのセルを直接参照するんじゃなくて、
A列とB列の値を連結した1個の数字(値は1,001〜600,600)×36万の1次元の
配列2個(シートAからのものと、シートBからのもの)を作って、配列同士の比較をした
方が速いんじゃないの?
0567デフォルトの名無しさん
2011/09/01(木) 12:59:37.79それでいいのなら、36万要素の配列Aを一つ用意して、一つ目のシートに対して、
hash = (sheet1.Cells(i, "A").Value - 1) * 600 + sheet1.Cells(i, "B").Value - 1: A(hash) = i
を計算しておいて、今度は二つ目のシートに対して、同じようにhashを計算すれば一瞬で済むじゃない。
0568デフォルトの名無しさん
2011/09/01(木) 14:56:36.90Set Menubar = Application.CommandBars("Tools")
Set cbcbtn = cbMenubar.Controls.Add(Type:=msoControlButton)
cbcbtn.Caption = "ほげほげ"
などとして,アドインタブにマクロを追加しているのですが,
アドインタブ内のバーのタイトルが"メニューコマンド"となっていて,
変更方法がわかりません.これを変更するにはどうしたらいいのでしょうか?
"Tools"が,アドイン->メニューコマンドとして
定義されてしまっているのでしょうか?
0569デフォルトの名無しさん
2011/09/01(木) 16:04:12.73初心者は先に自分を疑った方が良い
0570デフォルトの名無しさん
2011/09/01(木) 16:45:53.74シートのセル参照すると結構遅い
どこまで早くしたいかわからんが、素直にシート1のA1:B360000と
シート2のA1:B360000をそれぞれ2次元配列に入れて、配列どうしで比較するだけで良いんじゃね
s1 = Sheet1.Range("A1:B360000")
s2 = Sheet2.Range("A1:B360000")
For i = 1 To 360000
If s1(i, 1) = s2(i, 1) And s1(i, 2) = s2(i, 2) Then
...
みたいな感じ
つか普通にセル参照しても、うちの環境なら数秒のオーダーで終わったけどな
参照と比較以外で時間かかってるんじゃないか?
0571デフォルトの名無しさん
2011/09/01(木) 17:31:07.37ループは2重で「総当たり」だから時間がかかるんでしょ。
0573デフォルトの名無しさん
2011/09/01(木) 19:29:24.270574デフォルトの名無しさん
2011/09/01(木) 19:44:47.270575デフォルトの名無しさん
2011/09/01(木) 19:51:53.36ナカーマ いつまでもExcel2003を使い続けましょう!
0576デフォルトの名無しさん
2011/09/01(木) 21:38:16.81ソート&二分木探索で解決するだろJK
0577デフォルトの名無しさん
2011/09/02(金) 08:36:54.24あるマクロを設定しましてマクロボタンを作って 現在指定時間にクリックしてマクロ実行しているのですが
ボタンがたくさん増えたため 時間のずれがでてきまして・・・・
このボタンを毎日指定時間に 自動でボタンを押してくれるマクロを設定したいのです
ご指導お願いできないでしょうか? お願いいたします
0578デフォルトの名無しさん
2011/09/02(金) 08:46:07.020579デフォルトの名無しさん
2011/09/02(金) 15:23:37.81If FoundCell Is Nothing Then
Else
FoundCell.Select
上記のようにfindで見つけたセルをセレクトしたいのですが
検索範囲をB列のみとしているのですが実行して
セレクトされる列は何故かA列になってしまいます。
どこが悪いのか分かる方ごご指摘ください。お願いします。
0580デフォルトの名無しさん
2011/09/02(金) 16:36:11.950581デフォルトの名無しさん
2011/09/02(金) 16:36:58.670582デフォルトの名無しさん
2011/09/02(金) 19:47:15.12初心者なので 一旦自分なりにくぐって見ます ありがとうございました
0583デフォルトの名無しさん
2011/09/02(金) 21:10:23.01こんどは仕事で使える「便利技」を重点的にたくさん学びたいんだけど
そういう中級レベル以上を対象としてる
とくに便利技のサンプル例がたくさん載ってる本はありませんか?
0584デフォルトの名無しさん
2011/09/02(金) 21:15:29.680585デフォルトの名無しさん
2011/09/02(金) 21:20:41.040586デフォルトの名無しさん
2011/09/02(金) 21:58:30.79基礎が出来たなら、仕事で使えそうな便利技を勉強するも、仕事の中でこういう風に出来たら便利なのになと思うことを実際にコード書いてみるといいと思う。
大抵のことは、検索すれば答え出ると思う。その中で不足していることを補えばいいのでは…
学生だと話ずれてしまってるかもだが…
0587デフォルトの名無しさん
2011/09/02(金) 22:36:16.11・Excel VBAのルールを理解している
・構造化プログラミングが出来る
・クラス設計が出来る
・プログラミングの定石を理解している
俺はどれも中途半端。
っていうかクラスモジュール使ったことないorz
クラスが必要になる場面に出くわしていないっていうのもあるけど。
0588583
2011/09/02(金) 22:54:38.45for nextが使いこなせる
ローカル変数とグローバル変数がわかる
フォームも使いこなせる
モジュールの考え方がわかる
サブルーチンで、値渡し、参照渡し、矢切りの渡しの区別がつく
しかし
クラスとはなんのことかさっぱり分りません
構造化プログラミングの意味は説明はひととおり読んで意味はわかったけどそんな大そうな用語を使う意味が分りません。
0589デフォルトの名無しさん
2011/09/02(金) 23:17:58.61http://www.asahi-net.or.jp/~ef2o-inue/top01.html
ここのVBA応用とかAPI関係とか社内でいろいろするなら配布の問題とか
ここら辺が望んでる辺りじゃないの
0590デフォルトの名無しさん
2011/09/03(土) 00:26:33.50VBA のクラスは不完全だから、あまり気にしなくてもいい。
0591デフォルトの名無しさん
2011/09/03(土) 00:49:23.41On Error Resume Next が正しく使える
0592デフォルトの名無しさん
2011/09/03(土) 02:23:48.910593デフォルトの名無しさん
2011/09/03(土) 02:32:09.180594デフォルトの名無しさん
2011/09/03(土) 05:47:47.10何で理解できないのか分からないけどクラス理解してないとか入門突破してないよ
0595デフォルトの名無しさん
2011/09/03(土) 07:00:19.950596デフォルトの名無しさん
2011/09/03(土) 07:57:45.620597591
2011/09/03(土) 08:33:43.40他にもどうしてもって時にOn Error goto 0 と挟んで使うけど
0598デフォルトの名無しさん
2011/09/03(土) 08:43:11.41遅レスだがあまり信用はしてはいけないよ
何にでもバグはある
0599デフォルトの名無しさん
2011/09/03(土) 13:07:47.43また、引数に出来るとして、受け取った側で渡されたのが
ListBoxなのかどうかを判断するにはどうすればいいでしょうか?
よろしくお願いします。
0600デフォルトの名無しさん
2011/09/03(土) 13:46:23.05普通にAs ListBoxで渡せなかったっけ
もしくはVariantで受けてTypeNameで判定
http://officetanaka.net/excel/vba/function/TypeName.htm
0601デフォルトの名無しさん
2011/09/03(土) 15:18:34.21どういう状況でListBoxを引数にする必要が出てきたのかな?
0602デフォルトの名無しさん
2011/09/03(土) 16:50:42.75登録していくのですが、リストボックスには最大10個までしか商品名は
登録しない。
古い順から消去して、追加される商品名は先頭に追加する。
こういうルールなので、リストボックスが違うだけで、リストボックスに追加、削除する
プログラムは同じなので、追加、削除するプロシージャを使い回したいのです。
Add_ListBox(Name as string,LB as ListBox)とやると、LBに引数を設定する際、
修正候補"="とエラーが出ます。
Variantでもおなじです。
よろしくお願いします。
0603デフォルトの名無しさん
2011/09/03(土) 17:15:33.21そのAsは何?
0604デフォルトの名無しさん
2011/09/03(土) 17:22:10.410605デフォルトの名無しさん
2011/09/03(土) 18:14:22.770606デフォルトの名無しさん
2011/09/03(土) 18:41:52.980607デフォルトの名無しさん
2011/09/03(土) 18:50:13.29ググればこれくらいのことは分かる。
sub hoge()
Call Add_ListBox("foo",ListBox1.Object)
End Sub
sub Add_ListBox(Name as string,LB as Object)
LB.AddItem(Name)
End Sub
0608デフォルトの名無しさん
2011/09/03(土) 22:05:08.91なんか定期的に出てくるなぁ、VBA でクラスマスターしたってアホが。
>>598
なんにでもバグはあるけど、その確率がぜんぜん違うだろ。
0609デフォルトの名無しさん
2011/09/03(土) 22:06:53.570610デフォルトの名無しさん
2011/09/03(土) 22:12:42.81次に読むべきオススメの本ってありますか?
あまりお金がないので後はその二冊目の本と辞書っぽい本だけ買って何とか自分で大抵のものは作れるようにしたいです
0611デフォルトの名無しさん
2011/09/03(土) 22:24:12.29> なんにでもバグはあるけど、その確率がぜんぜん違うだろ。
お前素人だろ
0612デフォルトの名無しさん
2011/09/03(土) 22:48:31.820613デフォルトの名無しさん
2011/09/03(土) 23:00:14.99半導体が接触不良を起こす確率 vs ここに質問しに来る人間のバグを仕込む確率
0614デフォルトの名無しさん
2011/09/03(土) 23:07:38.14自称玄人乙
0615デフォルトの名無しさん
2011/09/04(日) 00:01:52.65range.Select
これでA列の一番下のセルを選択したいのですが
A列が2列以上あれば正常に動きます。
しかし、A列が1列しか無い場合、A1048576が選択されてしまいます。
何故でしょうか?分かる方教えてください。お願いします。
0616デフォルトの名無しさん
2011/09/04(日) 00:08:36.300617デフォルトの名無しさん
2011/09/04(日) 00:44:55.80あれ?例のクラス理解できない子?
0618デフォルトの名無しさん
2011/09/04(日) 00:48:35.30目がバグってる可能性がある
0619デフォルトの名無しさん
2011/09/04(日) 02:03:03.01>自称玄人乙
「〜乙」はヤツの口癖だったからおそらく同一人物だろ
0620デフォルトの名無しさん
2011/09/04(日) 02:04:36.73だから 2行 以上ないとそうなるでしょ
0621デフォルトの名無しさん
2011/09/04(日) 02:43:40.230622デフォルトの名無しさん
2011/09/04(日) 02:47:08.780623デフォルトの名無しさん
2011/09/04(日) 07:42:15.81例のクラスって何だ?
>>619
深夜作業乙 (w
0624デフォルトの名無しさん
2011/09/04(日) 07:43:37.310625デフォルトの名無しさん
2011/09/04(日) 09:11:14.81もう簡易用途だったら、わざわざプログラムの最適化作業に時間費やす必要はなさそう
0626デフォルトの名無しさん
2011/09/04(日) 22:19:39.870627デフォルトの名無しさん
2011/09/05(月) 07:48:37.26手法を知ってるならやらなくていいだろ
0628デフォルトの名無しさん
2011/09/05(月) 10:41:41.330629デフォルトの名無しさん
2011/09/05(月) 10:52:53.15呼び出されているというのがいまいちよくわからんけど、
Initailize/Terminate もしくは Activate/Deactivate で、
フラグ On/Off して、それ見るんじゃだめ?
0630デフォルトの名無しさん
2011/09/05(月) 12:01:06.41Load UserForm2
Debug.Print "表示されているユーザーフォームの数:" & DoEvents
Debug.Print "ロードされているユーザーフォームの数:" & UserForms.Count
0631デフォルトの名無しさん
2011/09/05(月) 14:55:19.200632デフォルトの名無しさん
2011/09/05(月) 15:24:38.67こっちのほうが良いと思う
Excel総合相談所 98
http://hibari.2ch.net/test/read.cgi/bsoft/1312896741/l50
0633デフォルトの名無しさん
2011/09/05(月) 16:36:33.90そのコードじゃ「どれが」ってのがわからないよ
0634628
2011/09/05(月) 18:45:09.69やってる事は、シートのダブルクリックイベントでフォームのcheckboxがチェックされているかによって
プロシージャを実行するかしないかという事なんですが、フォームを閉じる際にTerminateが走るのは
確認しました。
しかし、フォームを閉じた後シートをダブルクリックするとフォームは呼び出していないのに
Initailizeが走ってフラグがTrueになってしまいます。
ユーザーフォームが呼び出されていないのにInitailizeが走るのってバグ?
エクセル2003です。
0635デフォルトの名無しさん
2011/09/05(月) 19:31:21.96> ユーザーフォームが呼び出されているかを知る方法って有りますか?
フォームがロードされているかどうか確認する
function dfIsFormLoaded(Byval strFormName as String) as Boolean
on Error Goto ErrTrap
Dim i as integer
dfIsFormLoaded = false
for i=0 to forms.count - 1
if UCase$(Forms(i).name) = UCase$(strFormName) then
dfIsFormLoaded = truen
Exit Function
end if
Next
Exit Function
ErrTrap:
On Error goto 0
End Function
0636デフォルトの名無しさん
2011/09/05(月) 19:38:00.60書いてあるのは「ユーザーフォームが呼び出されているかを知る方法」であって
「どれが」とは書いて無い
0637デフォルトの名無しさん
2011/09/05(月) 21:09:29.72findにて連続検索をして、見つかったセルの隣のセルの値を取得して
見つかったセルが3個あればその中から一番高い値を選択したいのですが
どのような方法、または関数を使うのがいいでしょうか?
お願いします。
0638デフォルトの名無しさん
2011/09/05(月) 21:22:17.87MAX
0639デフォルトの名無しさん
2011/09/05(月) 21:46:15.56最大値はWorksheetFunction.Maxでも比較演算でもお好きに
それだけ解れば、あとは自分で書いた
> 連続検索をして、見つかったセルの隣のセルの値を取得して
> 見つかったセルが3個あればその中から一番高い値を選択
をそのままVBAに直すだけだろ
0640デフォルトの名無しさん
2011/09/05(月) 21:53:08.02丸投げかよ。
っていうかさ、お前どこまで考えたの?
コード書いたの?馬鹿なの?死ぬの?
0641デフォルトの名無しさん
2011/09/05(月) 21:53:55.910642デフォルトの名無しさん
2011/09/05(月) 22:05:08.20プログラムを書けばよい
0643デフォルトの名無しさん
2011/09/05(月) 22:08:26.92Cells(1, 1) = 11
Cells(1, 2) = 24
Cells(1, 3) = 36
Cells(1, 4) = 44
Cells(1, 5) = 58
Cells(1, 6) = 64
Cells(1, 7) = 77
Sub 逐次探索()
Dim k As Integer, j As Integer
k = InputBox("数字を入力してください。")
For j = 1 To 7
If cells(1, j) Then
Exit For
End If
Next
If cells(1, j) Then
MsgBox j & "番目です"
Else
MsgBox "無いよん"
End If
End Sub
ここまで、自力で作成しましたがどんな数を入れても、
"1番目です"としか出ません。
どなたか対処法をお願いします。
0644デフォルトの名無しさん
2011/09/05(月) 22:10:53.31If cells(1, j) Then
って何を判定させたいの?
0645デフォルトの名無しさん
2011/09/05(月) 22:38:33.08すみません、=36です。
0646デフォルトの名無しさん
2011/09/05(月) 22:52:03.842カ所ある cells(1, j) を cells(1, j).Value = k ってしたらいいのでは?
inputboxに入れた数字を k に保存して、for〜nextループで調べて
一致したら、その数字が何番目なのかを表示するって処理でしょ?
(一致しなかったら「無いよん」と表示)
0647デフォルトの名無しさん
2011/09/05(月) 22:56:25.97無事に完成しました。
ご指摘ありがとうございました。
0648デフォルトの名無しさん
2011/09/06(火) 07:18:07.17二つめのIf文は危険なコードだと思う。
最初のIf文で検索できなかった場合、jは8となる。
今回は偶々一つ多くてもセルの位置に余裕があるからいいけど、
セルの位置が最大255の場合ならセルの列の最大数超えるし、
配列の場合は定義の範囲を超えてしまう。
二つめのIf文は j で判定したほうが安全。
0649デフォルトの名無しさん
2011/09/06(火) 10:33:07.56普通に表示させたらOKボタン押すまでマクロの実行が止まりますよね。
メッセージボックスが出てもセルの値を順に見続けて既にメッセージボックスが出てても、
次のメッセージボックスを表示させたいんだけどどうすればいいですか?
0650デフォルトの名無しさん
2011/09/06(火) 11:02:04.18抑えられますが、 Application.ScreenUpdating = Trueになるときに
ちらつくのは抑えられませんか?
0651デフォルトの名無しさん
2011/09/06(火) 14:58:48.98全部調べて文章作ってからメッセージボックスを表示する
0652デフォルトの名無しさん
2011/09/06(火) 15:20:19.25考えつかんかった。
0653デフォルトの名無しさん
2011/09/06(火) 15:46:46.610654デフォルトの名無しさん
2011/09/06(火) 15:58:38.390655デフォルトの名無しさん
2011/09/06(火) 19:09:40.71指摘有難うございます。先程修正しました。
今、>>643と同じ条件で二分探索を作っていますが、良く分からず止まっています…。
0656デフォルトの名無しさん
2011/09/06(火) 19:32:51.780657デフォルトの名無しさん
2011/09/06(火) 19:34:19.22と、思うでござるが
0658デフォルトの名無しさん
2011/09/06(火) 20:12:50.24同じ条件ってよくわからん。具体的に。
0659デフォルトの名無しさん
2011/09/06(火) 21:11:04.80A1〜G1まで昇順にならんでいる前提で、列位置の数字を
1→7→4→2→3で当たり!って半分ずつ探す方法 のことでしょ
0660デフォルトの名無しさん
2011/09/06(火) 21:31:15.70余計分からん。
その探索は二分木探索じゃないし、>>643では二分木探索なんかしてない。
0661デフォルトの名無しさん
2011/09/06(火) 21:36:36.64>>643と条件は一緒で、自分なりに考えたのだが…
Sub 二分探索()
Dim i As Integer, j As Integer, k As Integer, m As Integer
k = InputBox("数字を入力してください。")
i = 1
j = 7
Do While i <= j
m = (i + j) / 2
If cells(m) = k Then
MsgBox m & "番目です。"
ElseIf cells(m) > k Then
j = m - 1
MsgBox j & "番目です。"
Else
i = m + 1
MsgBox i & "番目です。"
End If
Loop
End Sub
どんな数入れても、5番目、7番目、8番目と出てしまう。
訂正お願いします。
0662デフォルトの名無しさん
2011/09/06(火) 21:48:42.47逐次→二分でした
0663デフォルトの名無しさん
2011/09/06(火) 21:56:18.89デバッグできないの?馬鹿なの?死ぬの?
0664デフォルトの名無しさん
2011/09/06(火) 22:07:08.13すみません、初心者です。
0665デフォルトの名無しさん
2011/09/06(火) 22:12:35.05デバッグの仕方ぐらいググれよ。
デバッグぐらい小学生でも出来るよ。
0666656
2011/09/06(火) 22:24:37.02じゃあ、Subプロシージャから呼び出されたFunction()側から、何処から呼ばれたか知る術はないでござろうか?
引数として決め内でフラグを渡すとかは論外で、汎用的にできないですかね
0667デフォルトの名無しさん
2011/09/06(火) 22:35:11.19Sub new二分探索()
Dim i As Integer, j As Integer, k As Integer, m As Integer
k = InputBox("数字を入力してください。")
i = 1: j = 7
If (Cells(1, i).Value > k) Or (Cells(1, j).Value < k) Then
MsgBox ("範囲外です"): GoTo end_sub
End If
Do While i <= j
m = (i + j) / 2
If Cells(1, m).Value = k Then
MsgBox (m & "番目です"): Exit Do
ElseIf i = j Then
MsgBox ("該当なし"): Exit Do
End If
If Cells(1, m).Value > k Then
j = m - 1
Else
i = m + 1
End If
Loop
end_sub:
End Sub
0668デフォルトの名無しさん
2011/09/06(火) 23:03:50.88その場合、どんな数を入れても範囲外→該当なしになるので、考え直しています。
0669667
2011/09/06(火) 23:12:59.34>643 では「無いよん」って表示してるのに?
0670デフォルトの名無しさん
2011/09/06(火) 23:15:26.81失礼しました。自分の勘違いでした、
親切におしえてくださり、ありがとうございました。
0671デフォルトの名無しさん
2011/09/07(水) 06:04:25.03プログラムってものの作り方を解ってないなw
俺もプログラミング初めて1ヶ月くらいの超初心者の頃
そういうことが出来ないかと模索したことがあったよ
2,3ヶ月もすると、「自分は何バカなことやろうとしてたんだろう」と
思うようになったがw
0672デフォルトの名無しさん
2011/09/07(水) 06:16:52.400673デフォルトの名無しさん
2011/09/07(水) 08:02:28.517個くらいならどんな二分探索でもよいが、もし範囲が広い場合は毎回一致してるかどうかの判定は無駄なのでこんな二分探索になる。
Sub 二分探索()
Dim r As Range
Dim k, i&, j&, m&
k = Application.InputBox("数字を入力してください。", Type:=1)
If VarType(k) = vbBoolean Then Exit Sub
Set r = Range("A1:G1")
i = 1
j = r.Count
Do While i <= j
m = (i + j) \ 2
If r(m).Value > k Then
j = m - 1
Else
i = m + 1
End If
Loop
If j > 0 Then
If r(j).Value = k Then
MsgBox j & "番目です"
Else
MsgBox "該当なし"
End If
Else
MsgBox "該当なし"
End If
End Sub
r(m)とかの意味が分からないときは、とりあえずCells(1,m)とかに置き換えればいい。
0674デフォルトの名無しさん
2011/09/07(水) 08:17:29.220675デフォルトの名無しさん
2011/09/07(水) 08:31:27.97いや、だから関数とかないのかと思ってね
カーネル使えば出来そうだけど自分参照できんのかな
0676デフォルトの名無しさん
2011/09/07(水) 09:01:13.37Sub 二分探索()
Dim r As Range
Dim k, i&, j&, m&, temp#
k = Application.InputBox("数字を入力してください。", Type:=1)
If VarType(k) = vbBoolean Then Exit Sub
Set r = Range("A1:G1")
i = 1
j = r.Count
Do While i <= j
m = (i + j) \ 2
temp = r(m).Value
If temp > k Then
j = m - 1
ElseIf temp < k Then
i = m + 1
Else
MsgBox m & "番目です"
Exit Sub
End If
Loop
MsgBox "該当なし"
End Sub
ループを抜けたら不一致だ。
0677デフォルトの名無しさん
2011/09/07(水) 10:48:10.61「先頭行をデータの見出しとして使用する」をデフォルトでチェックを
入れたいのですが。
↓では出来ませんでした。
パラメータの渡し方が間違っているのでしょうか。
Application.Dialogs(xlDialogSort).Show arg8:=1
0678デフォルトの名無しさん
2011/09/07(水) 19:17:57.380679デフォルトの名無しさん
2011/09/07(水) 20:11:37.03名前付き引数は使えないっぽ
Application.Dialogs(xlDialogSort).Show , , , , , , , xlYes
0680デフォルトの名無しさん
2011/09/07(水) 22:49:19.96素人でも分かりやすいコードを書く→玄人プログラマ
素人でも分かりにくいコードを書く→素人プログラマ
0681デフォルトの名無しさん
2011/09/07(水) 23:29:18.910682デフォルトの名無しさん
2011/09/08(木) 04:41:21.87とくにVBAでは本を書くようなやつでも合格レベルの玄人は少ない。
所詮素人に毛が生えてるおかも知らんけど。
0683デフォルトの名無しさん
2011/09/08(木) 06:43:51.030684デフォルトの名無しさん
2011/09/08(木) 06:47:05.08素人ですか玄人ですか?
0685デフォルトの名無しさん
2011/09/08(木) 06:50:00.940686デフォルトの名無しさん
2011/09/08(木) 06:58:30.84禿同。本を書いているからって玄人というわけじゃない。
素人でも参考書は書ける。
0687デフォルトの名無しさん
2011/09/08(木) 07:28:00.08同じものが複数あるとき後ろの位置を返すには>>673になる。
0688デフォルトの名無しさん
2011/09/08(木) 07:50:27.79>>673のコードの基本は二分木探索で、その応用なんだから二分木探索だけ覚えておけばいいんじゃね?
ライブラリみたいな形にしておいてもいいと思うけど。
0689デフォルトの名無しさん
2011/09/08(木) 09:28:12.800690デフォルトの名無しさん
2011/09/08(木) 10:11:23.47ご回答ありがとうございます。
カンマで引数を指定しましたが、やはり出来ませんでした。
Application.Dialogs(xlDialogSort).Show
の前にセル選択をしていると
「先頭行をデータの見出しとして使用する」のチェックが
ついていなくて、
セル選択をしないとチェックが付いていました。
一番下の行も並び替え対象から外したいので
セル選択をしてから並び替えダイアログを表示しています。
0691デフォルトの名無しさん
2011/09/08(木) 18:25:10.66処理が終わり次第、順番にイベントが処理されていくと
思うのですが、イベント処理する時に溜まっている
イベントを破棄することって出来ますか?
0692デフォルトの名無しさん
2011/09/08(木) 18:35:45.68具体的には
Top1〜Top2の間かつLeft1〜Left2の間にあるオートシェイプのみをfor each したいです
0693デフォルトの名無しさん
2011/09/08(木) 20:41:03.42スレの流れでは二分探索だな。
0694デフォルトの名無しさん
2011/09/08(木) 22:13:38.64なるほど>>673は比較回数が少なくなるね。
ここで久々に勉強になった。
理解するのに少々手こずったが。
0695デフォルトの名無しさん
2011/09/08(木) 22:22:13.97すべてのオートシェイプをFor Eachで回して、そのオートシェイプがTop1〜Top2の間かつLeft1〜Left2の間にあるときだけ
実行すりゃいいんじゃね?
0696sage
2011/09/09(金) 10:15:37.68この本だけは認める。
0697デフォルトの名無しさん
2011/09/09(金) 10:27:02.77その本のサンプルコードをダウンロードして見たけど、玄人とは言えないな。
0698デフォルトの名無しさん
2011/09/09(金) 10:57:50.81ソフトはエクセル2003です。
○状況
フォルダ1に,商品データファイルが商品コードの頭文字A〜Zごとに,それぞれに独立のエクセルファイルに収納されている。
(商品コード,数量,値段,更新日などが1行ごとに並んでいて,列は固定です)
同じ書式で,一定期間ごとに更新用データファイルが送られてくる。(コードの頭文字に関係なく,ランダムな商品データが配列されている)
○やりたいこと
更新用ファイルの商品コードと一致するものを,フォルダ1のA〜Zのファイルの中から検索し,
フォルダ1の中の該当した商品の数量,値段などを最新のものに書き換えたい
VBAの中でvlookup,match+index関数などを組み込んで試してみましたが,一致しないとエラーが出たり,
非常に時間がかかってしまうなど上手くできませんでした。(1ファイルに3〜5万件のデータがあるため)
また,調べたところでは,配列形式など高速で処理する方法もあるようなのですが,私には理解できませんでした。
これをできるだけ高速に,エラーなく処理するプログラムのヒントをいただきたく存じます。
全体的にこういう流れ,という概要と,途中までの具体的なコードを書いていただけると,非常に助かります。お願いします。
0699デフォルトの名無しさん
2011/09/09(金) 11:21:48.25とりあえず、更新用データのファイルの中身を商品コードでソートして。
それからマッチングと書き換え処理をさせれば、単純にランダムな並びのまま
ファイルを更新するよりは、ファイルのオープン、クローズや検索のための
走査回数の無駄が省けるはず。
0700デフォルトの名無しさん
2011/09/09(金) 11:49:30.520701デフォルトの名無しさん
2011/09/09(金) 12:49:07.19醜い例でよければ、こんな感じで書ける。
Sub updateData()
ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells( _
ActiveSheet.Range("A1").End(xlDown).Row, _
ActiveSheet.Range("A1").End(xlToRight).Column)).Select
'商品コードでソート(先頭行が見出し行と仮定、以降も同様)
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
'更新処理本体
Dim IniChar As String, IniCharPrev As String
Dim bIsOpen As Boolean, bMatch As Boolean
Dim TimeStamp As Date
Dim a As Variant, b As Variant, vSrc As Variant
Dim sDataFolder As String, sDestFilename As String
Dim wbDest As Workbook
Dim wsDest As Worksheet
TimeStamp = Date '本日日付を取得(更新日も更新ファイルの値を反映するなら不要)
sDataFolder = "d:\folder1\" '対象フォルダを設定
IniCharPrev = ""
ActiveSheet.Range("A2:A" & ActiveSheet.Range("A2").End(xlDown).Row).Select
bIsOpen = False
'続く
0702デフォルトの名無しさん
2011/09/09(金) 12:54:10.71'続き
For Each a In Selection
IniChar = Left(a.Value, 1) '更新データの頭文字を取得
If IniChar <> IniCharPrev Then '直前に操作していたデータと頭文字が異なれば、ファイルを開きなおす
If bIsOpen = True Then '既に開いているデータファイルがあれば保存して閉じる
wbDest.Save : wbDest.Close : Set wsDest = Nothing : Set wbDest = Nothing : bIsOpen = False
End If
sDestFilename = IniChar & ".xls" '更新先ファイル名を設定(ファイル名に応じて要更新)
Workbooks.Open Filename:=sDataFolder & sDestFilename
Set wbDest = Workbooks(sDestFilename)
Set wsDest = wbDest.Worksheets(1) 'シートが複数あるなら要修正
bIsOpen = True
End If
IniCharPrev = IniChar
0703デフォルトの名無しさん
2011/09/09(金) 12:54:36.62'検索
vSrc = a.Value : bMatch = False
For Each b In wsDest.Range("A1:A" & wsDest.Range("A1").End(xlDown).Row)
If vSrc = b.Value Then '一致したら更新
b.Cells(1, 2) = a.Cells(1, 2) : b.Cells(1, 3) = a.Cells(1, 3) '値段&数量
b.Cells(1, 4) = TimeStamp '更新日(更新日も更新ファイルの値を反映するなら要修正)
bMatch = True
Exit For
End If
Next b
If bMatch = False Then
MsgBox "データ " & Chr(34) & CStr(a.Value) & Chr(34) & "(" & a.Row & "行目)は見つかりませんでした。", vbExclamation
End If
Next a
If bIsOpen = True Then '既に開いているデータファイルがあれば保存して閉じる
wbDest.Save : wbDest.Close : Set wsDest = Nothing : Set wbDest = Nothing : bIsOpen = False
End If
End Sub
0704デフォルトの名無しさん
2011/09/09(金) 13:31:07.400705デフォルトの名無しさん
2011/09/09(金) 14:41:03.120706デフォルトの名無しさん
2011/09/09(金) 15:29:15.050707デフォルトの名無しさん
2011/09/09(金) 15:30:52.220708デフォルトの名無しさん
2011/09/09(金) 15:39:29.87気違いじゃ
0709デフォルトの名無しさん
2011/09/09(金) 15:51:08.43その意見に大賛成だけどネックは「今まで記録マクロしか扱ったことがない素人」にDB扱わせるのは
問題ありすぎだと
0710デフォルトの名無しさん
2011/09/09(金) 15:56:41.33会社?が信用できるのかどうか。
遊びでもなさそうだし。
0711デフォルトの名無しさん
2011/09/09(金) 16:28:34.60>>698に「1ファイルに3〜5万件のデータがあるため」と書かれているので
a. A〜Zのファイルそれぞれに3〜5万件ある
b. 更新用ファイルの内容が3〜5万件ある
b-1. 全データ数が3〜5万件あって、毎回その全てのデータが更新用ファイルに入っている
b-2. 全データは5万件以上あって、更新用ファイルにはその中の3〜5万件分が入っている
のどれかなんだけど、Zから始まるものが3万件もあるとは考えづらいのでb.じゃないかと睨んでる。
そうすると、処理毎に3〜5万回の検索をしなければならないので、データベース的なものを
考えないと無理だと思う。(金曜の夜に起動しておいて、月曜来たときに終わってればOKとかいう場合は別)
0712デフォルトの名無しさん
2011/09/09(金) 16:33:50.13たいした時間かからないような気もする。
あと、>>701のコードは駄目駄目だから。rangeをSelectするのはド素人。
0713698
2011/09/09(金) 21:29:19.94データ件数の話ですが,フォルダ1内ののA〜Zのファイルがそれぞれ3〜5万件といったところです。
更新データは1万以下です。
正確には数の少ないX〜Zなどは1ファイルにまとめてあったりするところもあります。
結局は全部開いて検索しなければならないと思ったので詳細は省いて説明してしまいました。
時間がある程度かかることは承知していますが,その間放置しておけばよいので,
できるだけ自動化して上手く反映させられることを優先しています。
>>701
ありがとうございました。
でもこのコードは駄目駄目?なんですか?
まずAのファイルから開いてFor Eachで検索→一致したものを更新→Bのファイル→C……Zまで繰り返し
という流れで良いのでしょうか? まあそれが分かっても自分でコードは書けないわけですが
0714デフォルトの名無しさん
2011/09/09(金) 21:51:45.53>>701です。あくまで1例だけど、考え方はその理解で合ってる。
確かに指摘されてる通り直す余地が色々ある効率も良くないコードだけど、
一応やりたい事は実現できる。おいらもVBA熟練者じゃないんでお手本を見て参考にしたいなぁ。
更新データだけでなく、フォルダ中のデータも並びを入れ替えても良いなら、
最初にフォルダ中のデータも全部ソートしちゃうと効率上げられるね。
フォルダ中のデータに存在しないレコードを探す場合以外は、
マッチング処理用の走査開始位置を、前回のマッチング行の次の行から行えば良いので、
データ全体を検索のために走査する回数は1回で済ませられるはず。
まぁでもみんなの言う通り、Excelで処理しなければならない特別な理由が無いなら、
データベースに移行した方が良いと思うし、イニシャル毎にファイルを分ける運用も
やめてデータは1つの表にまとめた方が良いと思う。
それなら今回の処理だってACCESSとかならSQLを1文書くだけで済む。
0715デフォルトの名無しさん
2011/09/09(金) 23:24:55.480716デフォルトの名無しさん
2011/09/09(金) 23:25:57.600717デフォルトの名無しさん
2011/09/09(金) 23:32:39.25作業しているブックのシート名とBook1のシート名が同じ場合、上のようなマクロを実行すると
「リンクするシートを選択してください」とBook1のシートを選択する小窓が出ます。
Book2と同じシート名では問題なく実行できたのですが
なぜこのようになるのか教えてください
0718698
2011/09/09(金) 23:57:35.55ありがとう。まず少ないデータで確認しながらやってみます。
>716&その他の方
遠回りせずにすむ方法があればぜひ教えてください
0719デフォルトの名無しさん
2011/09/09(金) 23:59:43.060720デフォルトの名無しさん
2011/09/10(土) 08:16:09.19質問者とは全然関係ないんだけど
たまたま似たようなことやっててとても参考になりました。
どうもありがとう
0721デフォルトの名無しさん
2011/09/10(土) 08:18:44.44メモりリークするけどw
0722デフォルトの名無しさん
2011/09/10(土) 08:43:01.94それは何かしらのデータベースがインストールされていればの話でしょ。
mySQLとかPosGreとか無料のDBインストールして使ってみるのもいいかもしれないけどね。
DB使うってことは必然的にSQLの知識も必要になってくるわけで。
VBAで手軽にっていうのとかけ離れているのかもしれない。
DB向けの内容をExcelにやらせていること自体、システム設計に問題があると思う。
0723デフォルトの名無しさん
2011/09/10(土) 09:10:02.17> >>721
> それは何かしらのデータベースがインストールされていればの話でしょ。
> mySQLとかPosGreとか無料のDBインストールして使ってみるのもいいかもしれないけどね。
Excelの表に対してもADO&SQLで操作できるぞ?一部使えない命令(DELETE文とか)もあるけど
でも、使ってみたかんじではちょっと凝ったSQLは上手く動かなかったな
0724デフォルトの名無しさん
2011/09/10(土) 09:23:53.56絵を書くのにペイントを使わずワードを使ってるようなものだし
0725デフォルトの名無しさん
2011/09/10(土) 10:22:21.98http://www.connectionstrings.com/excel
サポートキレたって聞いたけどまだ生きてるのかな・・・
0726デフォルトの名無しさん
2011/09/10(土) 10:24:32.720727デフォルトの名無しさん
2011/09/10(土) 21:59:43.93エクセルバージョン=2003
ワークシートを判別する方法を教えてください。
もしSheet1がアクティブだったらこの処理。
Sheet2がアクティブだったらこの処理ってマクロ組んでるんですけど
IF反応してくれません。
他に.Selectとか =Trueとか試してみたけどさっぱり・・・
ググレカスしてもヒットせず途方に暮れてます。。。
IF Sheets("Sheet1").Activate Then
処理
Elseif Sheets("Sheet2").Activate Then
処理
・
・
・
0728デフォルトの名無しさん
2011/09/10(土) 22:16:48.89てな感じかな。
0729デフォルトの名無しさん
2011/09/10(土) 22:18:17.76Activateはシートをアクティブにするメソッド
アクティブなシートで処理を切り替えたいなら、
ActiveSheet.Nameみて判断すればいい
0730デフォルトの名無しさん
2011/09/10(土) 22:31:31.23>>729
解決できた!ありがとう。
助かりました。
知っていれば簡単な記述だけど、知らなかったら難しいですね。
おかげさまで更に応用させられそうです。
0731デフォルトの名無しさん
2011/09/10(土) 22:37:15.470732デフォルトの名無しさん
2011/09/10(土) 23:14:22.96アクティブなシートは何か調べるっていう発想の転換が必要なわけで
自分で書いてるけどいろいろググってもヒットしなかったんだろ
まあどんな単語でググったのか気にはなるが
0733デフォルトの名無しさん
2011/09/11(日) 03:01:35.79英語力に問題があるような…。高校で英語サボるとこうなるのか?
0734デフォルトの名無しさん
2011/09/11(日) 05:23:26.90今現在は、図形描画ツールによって作成された数十個のテキストボックスに書かれた文章をセルにコピーペーストするという
作業をやりたいのですが、
以前にそのスクリプトを頂いたのですが、数十個あるうちの半分ぐらいしかコピーペーストされなかったりします。
自分でそのコードを理解して、思うように作り直したいと思い勉強していたのですが、まだまだイマイチ理解できず。
思うように書けません。スクリプトを作っていくときに、熟練した方はどのように調べて書いているんでしょうか?
私はヘルプを読んだり、マクロの記録をやったりして出てくるスクリプト文とにらめっこしているのですがピンと来ないです。
用途別にわかりやすく解説されたリファレンスなどがあるサイトなどないでしょうか?
イメージとしては辞書を引きながらみたいな感じで少しずつでも目的のものが書けていくようになりたいのですが
そういう作業に適したサイトなどあるでしょうか?
熟練した人はヘルプなどから、細かなオブジェクトやメソッドを理解して作っていってらっしゃるんでしょうか?
0735デフォルトの名無しさん
2011/09/11(日) 11:51:19.06取りあえず、下のコードを実行する
Sub test()
Dim O As Object
On Error Resume Next
For Each O In ActiveSheet.Shapes
Debug.Print O.TextFrame.Characters.Text & " " & O.Name
Next
End Sub
デバッグ表示に「図形のテキスト 数字」が表示されている
その数字を下のコードのShapes(?)に入れる
Cells(1, 1) = ActiveSheet.Shapes(?).TextFrame.Characters.Text
複数の場合はShapes()の所をForで回して。
========================
ちなみに入門サイトで図形の操作はあまりないよ。
基本はWorksheetの操作。
グラフ・ピボット・図形はまれ。
サイトは検索しだいで出てくるけど、素人には解りにくい。
さらにヘルプはもっと解りにくい。
>>>細かな・・・理解とあるが時と場合による。
オブジェクトやメソッドと言うよりプロパティ(引数)は
組み合わせ次第でかなり変わる。
0736デフォルトの名無しさん
2011/09/11(日) 14:02:38.21でもVBA=VB6+EXCELなんで
普通の人が深く理解するのは難しいかも知れないです。
とりあえずヘルプについてはある日突然読めるようになります、多分。
それまで頑張ってみてはどうでしょうか。
0737デフォルトの名無しさん
2011/09/11(日) 16:17:31.67ありがとうございます。やっぱり地道にググッたりヘルプったりして
調べていくしかないのですね。
>>735様、コードもありがとうございます。
>>736様突然読めるようになるというのは、なんとなくわかります。
色々調べながらやってると、前よりはちょっとだけ意味がわかるので。
わかりました。ありがとうございます。
0738デフォルトの名無しさん
2011/09/11(日) 23:45:13.68文字列の中に$が入っていなかった場合の式は
Range("A1") like "[!$]"
では上手くいかないのですがどこが駄目でしょうか?
教えてください。
0739デフォルトの名無しさん
2011/09/11(日) 23:57:52.71not (〜 like "$")かな
〜 like "[!$]"だと「$以外の任意の文字がある場合」でtrueなんでない
0740デフォルトの名無しさん
2011/09/11(日) 23:58:26.91やるならこう
If Not s Like "*$*" Then
'入っていなかった場合の処理
End IF
0741デフォルトの名無しさん
2011/09/12(月) 09:57:48.91できなければMidとかで取り出せば?
理解せずコピペしたって、暫くしたら
意味不明なコードになるだけ。
0742デフォルトの名無しさん
2011/09/12(月) 10:10:44.86まあ正規表現で出来ることは、コードが冗長になっても良いなら全てVBAの組み込み関数と
制御構造で再現できるが、VBScript.RegExpならVBAから簡単に使えるし、
Win98SE以降ならOSに標準で入っているから避ける理由も無いだろう
まあVBScript.RegExpで事足りなくなると、次は鬼車などのライブラリとなるが、ここまでくると
敷居が高いと感じる人も居るし、鬼車の入ってない他機では使えないなどの障害も出てくるけどな
VB6の話になるが、俺の場合正規表現パターンをユーザーが入力するようなアプリでは
鬼車使って、正規表現を決め打ちで組み込む場合は、ほとんどVBScript.RegExpを使ってる
0743デフォルトの名無しさん
2011/09/12(月) 10:57:23.180744デフォルトの名無しさん
2011/09/12(月) 13:19:26.630745デフォルトの名無しさん
2011/09/12(月) 13:27:31.660746デフォルトの名無しさん
2011/09/12(月) 13:32:27.17残念、ハズレ
正規表現使って悲しいバグ生む奴は、正規表現使わなくても結局悲しいバグを生むし
正規表現無しなら悲しいバグ生まないという奴は、正規表現使っても悲しいバグなど生まない
結局は、本人がデキる奴かデキない奴かということで、正規表現を使うか使わないかは関係なかったりする
0747738
2011/09/12(月) 13:56:18.16ありがとうございます。参考にさせて頂きます。
自分のプログラムへの理解度が低いのは分かっています。
なのでいろいろと作ってみて勉強をしている最中です。
いろいろな意見が聞けて助かっています。
0748デフォルトの名無しさん
2011/09/12(月) 14:10:10.81お前がハズレ人間だ。
このスレから去れ。
0749デフォルトの名無しさん
2011/09/12(月) 14:44:02.66Likeを使うことそれ自体が目的じゃないのなら、
If InStr(Range("A1").Value, "$") = 0 Then
'なかった時の処理
End If
0750デフォルトの名無しさん
2011/09/12(月) 16:00:37.980751デフォルトの名無しさん
2011/09/12(月) 17:31:18.31ワロタwww
0752デフォルトの名無しさん
2011/09/12(月) 17:58:54.49キミはバグの有無に関わらず悲しい奴だなw
0753デフォルトの名無しさん
2011/09/12(月) 18:02:08.470754デフォルトの名無しさん
2011/09/12(月) 18:09:19.200755デフォルトの名無しさん
2011/09/12(月) 18:19:37.92つか、なんでこの流れで正規表現の話になるのかわからんわ。
0756デフォルトの名無しさん
2011/09/12(月) 18:25:44.16正規表現無しなら悲しいバグ生まないという奴は、正規表現使っても悲しいバグなど生まない(キリッ
0757デフォルトの名無しさん
2011/09/12(月) 18:25:55.53ってだけで、別に件の処理に正規表現使えと言ってるわけでもないのに
何故か勘違いしたバカが湧いたから、延々と正規表現の話が続いてる。
0758デフォルトの名無しさん
2011/09/12(月) 20:08:19.880759デフォルトの名無しさん
2011/09/12(月) 20:12:00.10普通っていうとファビョり出す人が結構いるのから気をつけんとな。
0760デフォルトの名無しさん
2011/09/12(月) 20:16:55.54うん知ってる。
0761デフォルトの名無しさん
2011/09/12(月) 20:28:19.58そのカキコが君には悔しくて仕方なかったようだけど、
言ってることは正論でしょ。
0762デフォルトの名無しさん
2011/09/12(月) 21:18:29.19もしくは全部やれ
0763デフォルトの名無しさん
2011/09/12(月) 22:41:40.35ブール型の変数ってTrueとFalseの2値しか取らないのだから
1bitでも十分な気がするのですが、
どうして2Byteもメモリを使うのでしょうか?
例えば、PCで2Byteの方が扱いやすいという理由だとしたら
バイト型変数が1Byteだということと整合性が取れないですし。
別に理由を知らなくても特に困らない興味本位の質問なのですが、
どなたか理由をご存知でしたら教えてください。
0764デフォルトの名無しさん
2011/09/12(月) 23:08:24.86少なくともビット単位では扱いにくいしメモリ効率も悪いだろう
何ビット目に割り当てているっていう情報が必須でしょ
バイトじゃなくてワードで割り当てられている理由はちょっと分からない
バイト単位でのアクセスよりワード単位のアクセスの方が速かった気がするから
それが原因か、原型のVBでそうなっていたのをただ引き継いだだけかもしれない
0765763
2011/09/12(月) 23:21:25.64どうもありがとうございます
やっぱりワードの方が処理しやすいからですか。
根が貧乏性なせいか、理由があると分かっても
どうにももったいない気がしてしまいますw
0766デフォルトの名無しさん
2011/09/12(月) 23:31:54.65そう思うならByteを使ってBooleanの代わりをさせた場合と
Integerとマスクを使ってビット単位でBooleanの代わりをさせた場合と
Booleanそのものを使った場合とで実行速度がどれくらい違うのか測ってみるといいのでは?
0767763
2011/09/12(月) 23:52:39.32>そう思うならByteを使ってBooleanの代わりをさせた場合と
いや、そこまでするほどの話じゃないのでおとなしくBoolean使います。
あと、マスク云々の方はやり方すらわからないので私にはできないです。
わざわざ提案していただきましたがご期待に沿えず申し訳ないです。
0768デフォルトの名無しさん
2011/09/13(火) 00:45:38.730769デフォルトの名無しさん
2011/09/13(火) 03:50:05.87CPU的にはバイト型も16ビットでも同じ速度なんだが、それではメモリの効率が悪いのでバイト型は8ビットで済むようにしてる
ただ、バイトデータのメモリ格納には制限があったりするんで、実際にVBAで1バイトの変数が、メモリを1バイトしか使ってないとは限らんはず
0770763
2011/09/13(火) 07:05:51.69>>769
すみません、寝落ちしてました
こんなくだらない質問に色々教えてくださった皆さん
どうもありがとうございました。
0771デフォルトの名無しさん
2011/09/13(火) 10:30:43.180772デフォルトの名無しさん
2011/09/13(火) 10:33:50.96間違いだらけで話にならん
0773デフォルトの名無しさん
2011/09/13(火) 11:02:28.43なんとなくP-CODEっぽい
0774デフォルトの名無しさん
2011/09/13(火) 11:36:21.640775デフォルトの名無しさん
2011/09/13(火) 11:39:48.320776デフォルトの名無しさん
2011/09/13(火) 11:40:32.110777デフォルトの名無しさん
2011/09/13(火) 11:42:01.300778デフォルトの名無しさん
2011/09/13(火) 23:47:47.830779デフォルトの名無しさん
2011/09/14(水) 07:45:26.44クチャ食い禁止。
0780デフォルトの名無しさん
2011/09/14(水) 13:19:01.800781デフォルトの名無しさん
2011/09/14(水) 13:29:16.310782デフォルトの名無しさん
2011/09/14(水) 14:52:35.190783デフォルトの名無しさん
2011/09/14(水) 17:46:17.99データ転記の際の上書きコードを教えろ
【スペック】
シートAに入力フォーム、シートBにデータテーブル。
シートAに入力したレコードをシートBに転記。(ボタン1)
シートBのレコードからシートAにレコードを呼び出す。(ボタン2)
【問題】
データを呼び出すコードを使った後、再度入力ボタンを押すと
転記先用シート”データテーブル”には呼び出した前のレコードと再度入力したレコードが重複。
【教えろ】
呼び出したデータに対し上書きできるコードをおまいら教えろ
0784デフォルトの名無しさん
2011/09/14(水) 17:50:16.660785デフォルトの名無しさん
2011/09/14(水) 18:42:07.13俺も>>783みたいなことは厨房の頃やったっきりでしばらくやってないから
もう訳解らなくて目眩がする
0786デフォルトの名無しさん
2011/09/14(水) 23:20:26.51残念ながらこれはRDBの概念。
EXCELで出来ちゃったらAccessいらないわな
SQLServerなんかも無料で良いかも
0787デフォルトの名無しさん
2011/09/14(水) 23:39:11.21例えば、a2に”亜”と入っていて、
a3に”亜”のShift_JISの9999(例)とか表示したい場合は
どうしたらいいのでしょうか?よろしくお願いします。
0788デフォルトの名無しさん
2011/09/14(水) 23:54:30.44Excelが手元に無くて試せないけど、
asc("亜")でコードが取れるようなのでそれを返却するようにしてはいかが?
0789デフォルトの名無しさん
2011/09/15(木) 01:35:30.850790デフォルトの名無しさん
2011/09/15(木) 01:47:36.940791デフォルトの名無しさん
2011/09/15(木) 07:05:12.75s = "あ"
dim hoge() as byte
hoge = strconv(s, vbfromunicode)
dim c as string
for each c in hoge
print hex(c)
next
0792デフォルトの名無しさん
2011/09/15(木) 07:49:59.61多重ループの中の一行だけ変えるために
0793デフォルトの名無しさん
2011/09/15(木) 08:10:10.96b = StrConv("亜", vbFromUnicode)
Dim i
Dim s As String
For Each i In b
s = s & Hex(i)
Next
MsgBox s
0794デフォルトの名無しさん
2011/09/15(木) 10:01:58.48先頭一文字の文字種別を判定しようとしてます
Sub test_Kanji()
Dim wrd As String
Dim i As Integer
For i = 1 To 10
wrd = Left(Cells(i, 1), 1)
Select Case LCase(wrd)
Case "a" To "z"
Cells(i, 2) = "アルファベット"
Case "あ" To "ん"
Cells(i, 2) = "ひらがな"
Case "ア" To "ン"
Cells(i, 2) = "カタカナ"
Case Is >= "亜"
Cells(i, 2) = "漢字"
End Select
Next
End Sub
んで以下の文字列に対してチェックしたんですが、(互)換、(一)定範囲、(二)に対してはチェックが出来ませんでした。
互換
一定範囲
asdrf
ひらがな
カタカナ
漢字
二
六
何故なんでしょうか。後、対処方法とかお教え願えないでしょうか
0795デフォルトの名無しさん
2011/09/15(木) 10:40:49.73Option Compare Text
0796デフォルトの名無しさん
2011/09/15(木) 11:27:57.46エクセル単体で可能でしょうか?
ググったらエクセルでTCP,UDP,RS232Cのテストをするソフトがあったのですが、
VB6のライブラリがいるとか書いてあったので、そういったものが無くても可能でしょうか?
0797796
2011/09/15(木) 11:29:58.150798デフォルトの名無しさん
2011/09/15(木) 11:41:58.220799デフォルトの名無しさん
2011/09/15(木) 12:29:39.14う〜っむ、、、、
有難うです
0800デフォルトの名無しさん
2011/09/15(木) 12:47:12.71http://www.cqpub.co.jp/hanbai/books/18/18771/18771_2syo.pdf
0801デフォルトの名無しさん
2011/09/15(木) 13:00:37.62自分でVBA用のライブラリを作ればいい
ライブラリの中身は通信関係のAPI呼び出しの定義が書いてあるだけなんで、
自分でいちいちAPI呼んでもいいけど、ライブラリ化しといた方があとあと便利
0802デフォルトの名無しさん
2011/09/15(木) 13:17:06.54多分いろいろ勘違いしてると思うよ
0803デフォルトの名無しさん
2011/09/15(木) 18:57:08.40ほう、詳しく教えてくれないか?
0804デフォルトの名無しさん
2011/09/15(木) 18:58:58.320805デフォルトの名無しさん
2011/09/15(木) 19:04:40.12>>801からそれを読み取るとは尊敬するわ
0806796
2011/09/15(木) 19:14:36.05winsockが私のエクセルにはないらしいです。
VBAエディタの参照設定にも無かったorz
0807デフォルトの名無しさん
2011/09/15(木) 19:31:27.72コードを書けって言ってるんかと思ったけど、VBAでAPI使うって
単純に宣言を書き直すだけじゃん。
コールバックみたいなのもあるけど。
0808807
2011/09/15(木) 19:33:54.650809デフォルトの名無しさん
2011/09/15(木) 19:42:01.190810デフォルトの名無しさん
2011/09/15(木) 21:56:53.36今手間はかかるが次同じような事があれば楽だぜ!
って、、、結局手間だし、
796はAPIを使用することにに難色を示していて、手間を惜しんでる訳ではないし、
796が言ったライブラリってそーゆー意味じゃないし。
804を見て本物のエスパーだと思った。
0811デフォルトの名無しさん
2011/09/15(木) 21:59:51.050812デフォルトの名無しさん
2011/09/15(木) 22:16:47.95http://pcdn.int21.co.jp/pcdn/vb/noriolib/vbmag/9802/winsock/
0813デフォルトの名無しさん
2011/09/15(木) 22:22:11.06http://homepage2.nifty.com/nonnon/SoftSample/SampleSocketApi.html
0814デフォルトの名無しさん
2011/09/15(木) 22:22:36.00お前もう出てこない方が良い。
なんか、gdgd
0815デフォルトの名無しさん
2011/09/16(金) 01:21:41.77バイナリ配布できないvbaならではって感じ
0816デフォルトの名無しさん
2011/09/16(金) 05:28:21.74ただ元の質問が外部モジュールや外部ライブラリとか使わないでできないか、って話だから
ソース提示してコピペすれば動くって言ってるんじゃないか?
0817デフォルトの名無しさん
2011/09/16(金) 06:40:18.93それは、「私はライブラリの意味を勘違いしている愚か者です」って自嘲しているのか?
0818デフォルトの名無しさん
2011/09/16(金) 08:11:57.570819デフォルトの名無しさん
2011/09/16(金) 08:26:24.600820デフォルトの名無しさん
2011/09/16(金) 08:31:14.03かつ、OCX版を知らなかったんだろう。
0821デフォルトの名無しさん
2011/09/16(金) 09:43:47.68ありがとうございます。
今、教えてもらったサイトを見てテストしようとしたのですが、
Private Sub Command3_Click() のしたほうに書かれている
lngWnP = GetWindowLong(Text1.hWnd, GWL_WNDPROC)
で、hWndがないとエラーが出てしまいます。
フォームには、プログラムを見てコマンドボタン3個とText1をみてテキストボックスを1つ
置いたのですが、何がいけないのでしょうか?
0822796
2011/09/16(金) 09:47:27.15よろしくお願いします。
0823デフォルトの名無しさん
2011/09/16(金) 09:58:45.40教える価値が無いと思う。
0824796
2011/09/16(金) 10:20:28.450825デフォルトの名無しさん
2011/09/16(金) 10:43:55.81お前には聞いてない
0826デフォルトの名無しさん
2011/09/16(金) 12:15:47.44あれVBAでOCX作れたっけ
0827デフォルトの名無しさん
2011/09/16(金) 15:59:00.94それってサーバー側に必要なだけじゃない?
クライアントにはいらないでしょ?
0828デフォルトの名無しさん
2011/09/17(土) 03:57:23.09i の値を0からループできますか?
今は0と1以上で分けて問題なく動いてますが、まとめてしまいたいです。
0829デフォルトの名無しさん
2011/09/17(土) 05:01:18.79何を言いたい?ちゃんと脳内を整理して書こうよ。
0830デフォルトの名無しさん
2011/09/17(土) 06:24:36.86つ Option Base 0
0831デフォルトの名無しさん
2011/09/17(土) 12:29:09.38For Each myShape In Worksheets("Sheet1").shapes
If myShape.Text <> "" Then
MsgBox myShape.Text
End If
Next myShape
text caption labelいろいろためしたけどだめでした
どれにすればいいのでしょうか
0832デフォルトの名無しさん
2011/09/17(土) 12:38:48.350833デフォルトの名無しさん
2011/09/17(土) 13:06:18.91For Each myShape In Worksheets("Sheet1").shapes
If myShape.TextFrame.Characters.Text <> "" Then
処理
End if
nex:
Next myShape
on error使ってエラー出たら次に飛ばすようにしてみたのですがエラーでます
なぜでしょうか
0834デフォルトの名無しさん
2011/09/17(土) 14:20:58.92それぐらいはしような
0835デフォルトの名無しさん
2011/09/17(土) 14:30:37.16それか、
On error Goto nex
For Each myShape In Worksheets(\"Sheet1\").shapes
If myShape.TextFrame.Characters.Text <> \"\" Then
処理
End if
nex:
エラー解消処理の何か
Resume \'再試行
Next myShape
すればいい、たぶん。
つーか、gotoでループなんかの処理制御しないほうがいいと思う
0836デフォルトの名無しさん
2011/09/17(土) 14:36:34.45知らないけど
0837デフォルトの名無しさん
2011/09/17(土) 19:38:53.960838デフォルトの名無しさん
2011/09/17(土) 20:12:20.270839デフォルトの名無しさん
2011/09/17(土) 20:22:43.19それでも不満ならアセンブラやれ、アセンブラ。
0840デフォルトの名無しさん
2011/09/17(土) 20:43:34.080841デフォルトの名無しさん
2011/09/17(土) 21:18:28.61テキストファイルを読み込んだ時に、変数に入れて
一行一行取り出して処理をしたいのですが、
それに適した変数の型ってありますか?
配列を自分で作るのでしょうか?
0842デフォルトの名無しさん
2011/09/17(土) 21:21:35.140843デフォルトの名無しさん
2011/09/17(土) 21:27:51.49ググってすぐに、Line Inputは出てきたのですが、
用例として1行読み込んだらセルに書く用例ばかりでして。
読み込んだ1行を溜め込む、リスト形式の変数がないかを
お聞きしたかったんです。
0844デフォルトの名無しさん
2011/09/17(土) 22:02:19.51Redimで配列を大きくしながら代入していけばいいし
ファイルをバイナリで丸ごと文字列型に読み込んでsplit(ファイル全体, vbCrLf)で配列に分割してもいい
0845デフォルトの名無しさん
2011/09/17(土) 22:17:18.82助かりました。
0846デフォルトの名無しさん
2011/09/17(土) 22:23:58.06Dim objArrayList
Dim obj
Set objArrayList = CreateObject("System.Collections.ArrayList")
objArrayList.Add "a"
objArrayList.Add "bb"
objArrayList.Add "ccc"
For Each obj In objArrayList
MsgBox obj
Next
0847デフォルトの名無しさん
2011/09/17(土) 22:42:49.54.Netめっちゃ遅いし、初回はCLR起動時間もプラスされるし
0848デフォルトの名無しさん
2011/09/17(土) 23:04:31.200849デフォルトの名無しさん
2011/09/17(土) 23:24:34.250850デフォルトの名無しさん
2011/09/18(日) 00:03:31.79バリアントにスプリットするのが簡単でいいと思う
0851デフォルトの名無しさん
2011/09/18(日) 00:20:23.52改行コード区切りをvbCrLfにしちゃうって誰に教わったの?
0852デフォルトの名無しさん
2011/09/18(日) 01:30:31.33お勧めの入門書があれば教えて下さい。
今は「ひと目でわかる・・・」シリーズを見てます
0853デフォルトの名無しさん
2011/09/18(日) 01:39:24.21入門書読んでる時点で将来性ないと思う
本気でやるならマクロの記録で自分で調べてくのがいいです
0854デフォルトの名無しさん
2011/09/18(日) 08:00:14.33本人がまずどのくらいプログラムできるか次第
他の言語である程度プログラムできるのであれば
マクロの記録から調べて行けば何とかなる
プログラム全くの初心者がマクロの記録みてどうこうするのは無理がある
次の入門書はいろいろ自分でみて、ある程度内容が解るけど全部は解らない、ぐらいのが良いと思う
0855デフォルトの名無しさん
2011/09/18(日) 10:41:53.37マクロの記録はEXCELのオブジェクトモデルを理解する上でしか役に立たない。
俺もそうやって覚えたけど、多様なRange指定方法などを覚える為に参考書は見ておいたほうがいいよ。
0856デフォルトの名無しさん
2011/09/18(日) 14:33:41.480857デフォルトの名無しさん
2011/09/18(日) 16:09:56.04バイナリファイルの読み書きができるから、可能か不可能かで言えば可能
0858デフォルトの名無しさん
2011/09/18(日) 16:54:27.19愛知 豊橋営業所
岐阜 関営業所
岐阜 四日市営業所
上記の文字列を、shift_jisに変換したいです。
愛知(88a4 926d)名古屋営業所(96bc 8cc3 89ae 8963 8bc6 8f8a)
最終的にshift_jisで並び替えをして表示したいのですが
excelの文字列をshift_jisに変換する方法はどうしたらいいでしょうか?
0859デフォルトの名無しさん
2011/09/18(日) 19:43:58.71目的を果たすためには
�@セルの文字列を取得する
�A取得した文字列のShift_JISコードを取得する
�B取得したコードをセルに書き込む
という流れになるわけだが、�Aは>>2の★3,★4にもある通り
Excelとは関係無いのでスレ違い
よって、ここで教えるとしたら�@と�Bのみだけど、それでも良いの?
0860デフォルトの名無しさん
2011/09/18(日) 22:06:42.850861デフォルトの名無しさん
2011/09/18(日) 23:26:59.990862デフォルトの名無しさん
2011/09/19(月) 01:26:30.68職場で使う工程管理表を作成しています。
下のような、ガントチャート風(?)の工程管理表を作っています。
横軸は時間、作業者の名前が縦に並んだ表で、
”各人に割り当てられた[仕事]や[休憩]などをオートシェイプのテキストボックスで作成”し、
表の上に置くことで全体の工程を管理する、という表です。
09 10 11 12 13 14
Aさん [仕事1] [ 休憩 ]
Bさん [ 仕事2 ] [ 休憩 ]
Cさん [ 仕事3 ] [ 休憩 ]
この表を作成し使用する上で非常に手間がかかる、
”各人に割り当てられた[仕事]や[休憩]などをオートシェイプのテキストボックスで作成”
という部分をマクロを使って素早くできないか、と考えています。
イメージとしては、マクロを実行すると、
”仕事内容は?” ”必要時間は?”
という質問が出てきて、それに対して答えを入力すると、
仕事内容が書かれたテキストボックスが、必要時間に合った幅で作成される、
というようなものを作りたいと考えています。
・質問と回答のフォームが表示される
・テキストボックスを作成しそこに文字を入れる
というマクロを作ったことが無いのですが、どんなキーワードで検索すれば、
参考になるサイト等が出てくるでしょうか?
教えてエロいひと!!
0863デフォルトの名無しさん
2011/09/19(月) 01:29:05.710864デフォルトの名無しさん
2011/09/19(月) 01:39:19.24オートシェイプのテキストボックスでなければならない必要は何ですか?
評判の悪い「エクセル方眼紙」風の使い方になるけど、10分や15分単位に列をせばめておいて、
ユーザーフォームへの入力内容の結果を受けて、当該時間の範囲のセルを結合させ、結合セルの
中に文字を入れる方法じゃダメですか? 時間の単位が5分単位とか?
0865デフォルトの名無しさん
2011/09/19(月) 01:44:43.33見事に自問自答してるじゃん。やりたいことがそれだけはっきりしてるなら一つ一つやっていったらいいよ。
検索は自分で言ってる言葉でまずググってみればいい。大抵のことはヒットすると思うよ。
ただ工程管理表なんてのはよくあるからある程度近いもののサンプルが多分見つかる気がするけど。。
0866864
2011/09/19(月) 01:49:59.78× 必要
○ 理由
ついでに、セルを利用したものだと、時間の重複のチェックもわりと簡単にできます。
セルに割り当てる時間の最小単位を15分と仮定します。
ある時刻〜15:15 がすでに「仕事2」に設定されていて、続いて15:00〜15:30を
「休憩」に設定しようとしたとき、15:00〜15:15に割り当てられたセルはすでに
結合セルになっているor当該セルに値がある と判定できます。
※ある時刻が14:00などの場合、1行×5列のセル結合になっている
※ある時刻が15:00だった場合はセルの結合には該当しないけど、当該セルには"仕事2"という文字が入ってる
>865
私は>862さんではありません。
0867864
2011/09/19(月) 02:03:39.70自問自答 を 自演乙 って意味にとらえてしまった。気を悪くされてたらすいません。勘違いです。もう寝ます。
0868デフォルトの名無しさん
2011/09/19(月) 02:09:22.17ご指摘の通り、セルの結合も考えてみたのですが、、、、
時間が10分単位で、使うのがおっさんばかりで細かいセルを見れないので、
テキストボックスを作って置くというやり方をしています。
仕事が増えたり減ったり伸びたりが非常に多く、簡単な操作で対応出来る点も大切です。
オートシェイプ扱えるようになりたいというのも、どうでもいい理由なんですけどね。
"ユーザーフォーム"というキーワードが知りたかったものでした。
ありがとうございます。
>>865
オートシェイプ
ユーザーフォーム
とりあえずググってみます。
こんな時間のありがとうございます。
0869デフォルトの名無しさん
2011/09/19(月) 07:59:46.73結局セルの上にテキストボックスを貼り付けるのなら、テキストボックスの文字も
見難くなるような気がするんだけど。
セルが見難いのならセルの高さをもっと大きくして、表示するフォントのポイントも大きく設定すればいいんじゃね?
セルを扱うよりオートシェープの扱いのほうがめんどくさい気もするし。
セルの結合なんてたいそうなことせずにセルに色つければ済むんじゃないかな。
仕事別に色分けすれば見やすいだろうし。
0870デフォルトの名無しさん
2011/09/19(月) 09:23:13.5410分で1列となってるセルを手作業で結合させるんなら「細かい作業だからおっさんには無理」なんだろうけど
ユーザーフォームで時間を入れてマクロで結合させる方法なら「細かい作業」はないよ。
オートシェイプの方が位置とサイズをドット(?)単位で指定しなきゃならないし、処理対象のオートシェイプの
判断は大変でしょ。(新規はともかく、変更に伴うサイズ変更対象テキストボックスはどれ?)
0871デフォルトの名無しさん
2011/09/19(月) 09:38:51.320872デフォルトの名無しさん
2011/09/19(月) 10:15:49.470873デフォルトの名無しさん
2011/09/19(月) 10:20:13.44ありがとうございました。
0874デフォルトの名無しさん
2011/09/19(月) 12:18:48.97あとはユーザーフォームの勉強をします。
ありがとうございます。
>>869
テキストボックスの中の文字は確かに見にくいですが、
それよりも多くの行を見渡すことでチーム全体の進捗を把握出来ることのほうが重要なんです。
ディスプレイが大きければ解決するんですけどね。
もしくはおっさんじゃなくて若者を起用するかw
>>869,870
・やっぱり時間が伸びそうだな → オートシェイプの端をドラッグして幅を広くする
・この仕事は他の人にやってもらおう → オートシェイプをドラッグして移動
工程の計画だけでなく、進捗をモニターしつつ、次の工程を作成するという使い方なので、
頻繁に書いたり消したり、伸ばしたり縮めたり、移動したりします。
オートシェイプの場合はこれらのことを直感的に行うことができるので使っています。
サッカーの作戦会議を、ホワイトボードの上で選手に見たてたマグネットを使ってやるような感じです。
だったらそもそもExcelでやるなという意見も出そうですが・・・・
勤務表がExcelなので、勤務表からその日に出勤している人をピックアップして、
工程表に名前を貼り付けて、シフトごとに並べるということをしています。
というわけでExcelを使っています。
0875デフォルトの名無しさん
2011/09/19(月) 18:45:46.99=sif(条件1,値1,条件2,値2,条件3,値3,…,条件n,値n,値n+1)
条件Xを満たすときは値Xを、該当無しの場合は値n+1を返す
Public Function sif(ParamArray params())
Dim c As Integer
Dim max As Integer
max = UBound(params())
For c = 0 To max Step 2
If c = max Then
sif = params(c)
Else
If params(c) = True Then
sif = params(c + 1)
GoTo Break
ElseIf c = max - 1 Then
sif = CVErr(xlErrNA)
End If
End If
Next
Break:
End Function
条件が14個まではOKなのですが、15個以上になるとエラーになります。原因は何でしょうか?
0876デフォルトの名無しさん
2011/09/19(月) 18:56:11.68エラーの場所も言わないし
0877デフォルトの名無しさん
2011/09/19(月) 18:57:25.360878デフォルトの名無しさん
2011/09/19(月) 19:06:54.970879デフォルトの名無しさん
2011/09/19(月) 19:11:19.91以下のようなエラーメッセージが出ます(>の部分)
>Microsoft Excel ヘルプ(&H)
>
>入力した数式は正しくありません。
>
>・ [ヘルプ] をクリックすると、数式を修正するための情報が表示されます。
>・ 関数の作成に関するヘルプを表示する場合は、[OK] をクリックし、[挿入] - [関数] をクリックします。
>・ 数式を入力していない場合は、等号 (=) やマイナス記号 (-) を使用しないか、または入力した値の
> 先頭にシングル クォーテーション マーク ( ' ) を入力します。
OKを押すとセル内容が表示され、15番目の条件に対応する値15が反転表示されます。
配列の要素=(条件1)0,(値1)1,(条件2)2,(値2)3,・・・、(条件15)28,(値15)29,・・・・)の(値15)
0から数えて29番目の引数のところで反転!
=sif(条件1,値1,条件2,値2,条件3,値3,…,条件14,値14,値15)だとOKで
=sif(条件1,値1,条件2,値2,条件3,値3,…,条件14,値14,条件15,値15,値16)だと上記エラーになります。
0880デフォルトの名無しさん
2011/09/19(月) 19:18:53.320881デフォルトの名無しさん
2011/09/19(月) 19:37:42.03ググってみたら一つの関数に使用できる引数は30 までと有りました、お騒がせしました。
0882861
2011/09/19(月) 23:28:18.87ユーザーフォームのコマンドボタンにハイパーリンクを設定したものを複数作ったのですが
このマクロを登録しているexcelファイルがアクティブな時は常にユーザーフォームを表示
するように設定したいと思っています。
ブックのイベントでactivateを使用しましたが、ハイパーリンクを実行するときにもう一度
ユーザーフォームを開こうとしてエラーが発生します。
このエラーを回避するためにif〜elselfでユーザーフォームが既に開かれている場合は
次の動作に移るようにしたいのですが、次の動作に移らせる為のコードがわかりません。
説明が分かりにくいかと思いますが、よろしくお願いします。
0883デフォルトの名無しさん
2011/09/20(火) 00:57:30.78このPCにはエクセル入ってないから実際に出来るかどうか試してないんですけど、
ユーザーフォーム開く命令(たしか Userform.Show でしたっけ?)の前に
On Error Resume Next を書いておいて
開く命令の次には On Error Goto 0 で Resume Next の効果を取り消すということで
二重に開こうとしてエラーが出ても無視するように出来ませんでしょうか?
こういうやり方(エラートラップでエラーを回避する手法)は
邪道らしいですけど、とりあえず目的は果たせそうな気がします。
0884デフォルトの名無しさん
2011/09/20(火) 01:12:53.060885デフォルトの名無しさん
2011/09/20(火) 01:36:26.14その処理でフォームを開く必要なんてないと思うんだが
0886デフォルトの名無しさん
2011/09/20(火) 07:37:46.41On Error GotoとかOn Error Resume Nextとか本来の使い方じゃない方法で
問題を解決するという癖はやめておいたほうがいい。
0887デフォルトの名無しさん
2011/09/20(火) 07:49:08.65On Error Resume Nextはいつも後ろめたさを感じる使い方しかしてないな。
エラーを発生させることでしか判定が出来ない状況で使うって事でいいんじゃない?
当然別の判定方法があればそちらを使うべきだが。
0888デフォルトの名無しさん
2011/09/20(火) 10:01:24.07A B
0 〜 4 → 0
5 〜 9 → 5
10 〜 14 → 10
15 〜 19 → 15
20 〜 24 → 20
以下続く
0889デフォルトの名無しさん
2011/09/20(火) 10:22:51.55初歩的なことなので既に解決策見つけてるかも知れないけど
こういうのは配列やコレクションで解決できるよ
配列使う場合は2次元配列で、コレクションならクラス使って
条件,値,条件,値,…と交互に入れるのではなく、「条件,値」をセットで格納すると良い
0890デフォルトの名無しさん
2011/09/20(火) 10:23:20.25Int(数値/5)*5
WorksheetFunction.Floorを使うようでは素人。
0892デフォルトの名無しさん
2011/09/20(火) 10:52:45.98FloorやIntやRoundDownを使うようでは素人。
つーか、これって小学校算数の質問だよね?
計算方法が解ってる上で、VBAで整数商を求める演算子や切り捨てを行う関数名が解らないと言うならまだしも
計算方法、解の求め方を聞いているようでは、素人以前、小学校低学年以下。
0893デフォルトの名無しさん
2011/09/20(火) 10:59:59.48おっしゃるとおり
\演算子をすっかり忘れてたよ。
0894デフォルトの名無しさん
2011/09/20(火) 11:04:12.060895デフォルトの名無しさん
2011/09/20(火) 11:25:50.28今回は整数限定での質問なんだから関係ない話だ
0896デフォルトの名無しさん
2011/09/20(火) 11:57:27.90だめだこいつ。
0897デフォルトの名無しさん
2011/09/20(火) 12:11:35.22元の質問まで辿ると、それで解決できる問題じゃないな
0898デフォルトの名無しさん
2011/09/20(火) 13:42:37.03負け惜しみ(・∀・)ミットモナイw
0899デフォルトの名無しさん
2011/09/20(火) 13:46:28.44なんで?
0900デフォルトの名無しさん
2011/09/20(火) 14:11:59.83はいはい、あんたが勝ち
0901デフォルトの名無しさん
2011/09/20(火) 15:22:31.37セルに1桁から5桁の数字と名前が入っています。
例 123 佐藤、 54321 鈴木 等というように。
これを数字を除いて名前だけでソートするにはどのような方法がありますか?
ヒントを教えてください。お願いします。
0902デフォルトの名無しさん
2011/09/20(火) 15:38:18.310903デフォルトの名無しさん
2011/09/20(火) 16:10:40.72区切り位置で区切り文字をスペースにすりゃ簡単に分けることができる。
0904デフォルトの名無しさん
2011/09/20(火) 16:24:35.07ボウヤ、一人で何と戦ってるの?
周りは、君に教えを授けたり諭したりしてるつもりはあっても
君と言い争ったり戦ってるつもりの奴なんていないよ
君は質問者じゃないにしろ、君が知らないこと、忘れていたことを
教えて貰ったんだから、感謝こそすれ、悪態付いたり質問とは全く
関係ない条件出して「俺のやり方だって正しいんだ」とごねたり
するなんて以ての外だぞ
0905デフォルトの名無しさん
2011/09/20(火) 16:59:05.39ファイヤー!
0906デフォルトの名無しさん
2011/09/20(火) 17:06:43.70セルA1が数値かどうかを調べるにはどうしたらいいですか?
また数値のとき整数かどうかを調べる方法も教えてください。
0907デフォルトの名無しさん
2011/09/20(火) 17:12:35.140908デフォルトの名無しさん
2011/09/20(火) 17:17:29.90★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
0909デフォルトの名無しさん
2011/09/20(火) 17:21:23.36お馬鹿なんでしょ
遊ばれてる自覚のない彼と一緒でw
0910デフォルトの名無しさん
2011/09/20(火) 17:31:26.38整数かどうかはInt使ってなんとかできました。
数値かどうかを教えてください。
IsNumericだと空白もTrueになってしまいます。
>>909
馬鹿ですいません
0911デフォルトの名無しさん
2011/09/20(火) 17:58:45.370912デフォルトの名無しさん
2011/09/20(火) 18:37:46.85Andで両方判定してできました。
0913デフォルトの名無しさん
2011/09/20(火) 20:45:31.640914デフォルトの名無しさん
2011/09/20(火) 21:08:47.180915デフォルトの名無しさん
2011/09/20(火) 21:15:25.570916デフォルトの名無しさん
2011/09/20(火) 21:31:21.87Dim a As Range
Dim b As New Collection
Dim c As Range
Dim i As Long
Set a = Range("A1:B5")
For i = a.Count To 1 Step -1
b.Add a(i)
Next
For Each c In b
MsgBox c.Value
Next
End Sub
もちろん回り道のネタ。
0917デフォルトの名無しさん
2011/09/20(火) 23:07:34.14ありがとうございます。
もう一つ教えて下さい。
CSVファイルの読み込みをググっていたのですが、
例として
'CSVファイル読込
i = 1
Do While Not EOF(1)
'1行読み込む
Line Input #ch, csvStr
'カンマ区切りで配列に格納
str = Split(csvStr, ",")
'セルのレンジを指定して、配列の値をセット
Range(Cells(i, 1), Cells(i, UBound(str) + 1)) = str
i = i + 1
Loop
みたいなコードがよく書かれているのですが、
Range(Cells(i, 1), Cells(i, UBound(str) + 1)) = str
の意味がよく分からないのです。
UBoundの意味は分かったのですが、何で此で
一気にセルに書き込み留のでしょうか
もしかして一気に書き込んでる訳ではないのでしょうか?
0919デフォルトの名無しさん
2011/09/20(火) 23:15:03.150920デフォルトの名無しさん
2011/09/20(火) 23:21:12.53セルに書き込む時に列の指定をfor等でループさせるなら
分かるのですが、UBoundは「引数に指定した配列の、最も大きい要素番号を返す 」
のですよね。
何故、これ
Range(Cells(i, 1), Cells(i, UBound(str) + 1)) = str
で、i行目の1列からi行目のスプリットされた配列数の列まで
一気に記入されるのでしょうか?
そういうものだというのなら、それまでなんですが、
その説明はヘルプに載ってませんよね?
0921デフォルトの名無しさん
2011/09/20(火) 23:25:56.48いつからこんなことができるようになったのか
0922920
2011/09/20(火) 23:26:15.92そんなつもりはありませんので、よろしく御願いします。
0923デフォルトの名無しさん
2011/09/20(火) 23:29:09.490924デフォルトの名無しさん
2011/09/20(火) 23:33:30.79ありがとうございます。
配列=配列の考え方なんですな。
スゲー!スッキリしました。
0925デフォルトの名無しさん
2011/09/20(火) 23:50:28.27名前のない計算より名前の付いた処理の方が保守性に優れるから
0926デフォルトの名無しさん
2011/09/21(水) 00:02:23.07基地外だからファビョ〜ンってなるぞw
0927デフォルトの名無しさん
2011/09/21(水) 00:04:25.77おれはなんかスッキリしないんだよね、昔から。
そんなもんだって覚えたけど。
0928デフォルトの名無しさん
2011/09/21(水) 02:15:27.02配列=配列
それは違うぞ!
>>927
VBAばっかやってないでperlとか他の言語やるといい
0929デフォルトの名無しさん
2011/09/21(水) 08:25:46.25> ちょっとまて
> 配列=配列
> それは違うぞ!
えっ!違うの?
0930デフォルトの名無しさん
2011/09/21(水) 09:16:16.02これは特殊な例だね
個人的にはRange.Fill(arr)みたいな仕様の方が分かりやすかったかな
0931デフォルトの名無しさん
2011/09/21(水) 09:21:58.13RangeじゃなくてRange.Value
0932デフォルトの名無しさん
2011/09/21(水) 10:13:34.40上級者の道へとスキルアップするにはどうしたらいいですか?
とにかくVBAを毎日さわっていじくりまわりたい。
就職ではIT業界は経験が重要と言われるけど、それはもっともだと思う。
オレは理系で高学歴で頭がいいけど
毎日さわって経験を積まないとどうしようもないと思ってる。
でもさわろうと思ってもVBAでやるような作業がないからいつまでたっても経験は積めないまま。
本屋に並ぶ入門書のような解説じゃなくて
いろいろいじれることのできる教材、
例えばサンプルプログラムがいっぱい載ってるやつとか
http://www.amazon.co.jp/gp/product/4844326864/
の本のように実用面重視の自分の力でいろいろコードに改良を加えていけるような
そういう経験が積める教材はないですか?
0933デフォルトの名無しさん
2011/09/21(水) 10:52:04.56四日市は三重だぞ
0934デフォルトの名無しさん
2011/09/21(水) 18:47:21.33そんな事言ってる時点で一生無能のまま
なんで毎日触ってないの?
普通に生活してれば仕事じゃなくてもテキスト処理とかやるだろ
こんな簡単にguiできるツールないよ
0935デフォルトの名無しさん
2011/09/21(水) 22:10:21.51確かに有名だねその本。
VBAにしろ他のプログラムにしろみんな経験を基に作ってるんだよ
あんたは頭が良いんだろ?逆引きとか本読んでそんなサイトを
立ち上げろよ。
excelで処理せずすべてVBAで作ってみたら?
ピボット・グラフ・図形なんて全部覚えるだけで天才だわ。
理系で頭良いんだったらmougとかの質問にもチャレンジしたら?
経験無いんだったら擬似的に質問答えながら経験も積めるはず。
最後に本なんか人それぞれ価値観違いますねん。
リファレンス型・逆引き・プログラム作成型いろいろあるから
自分で買って実際見て考えろ!
その利口な頭脳で。
0936デフォルトの名無しさん
2011/09/21(水) 22:30:25.83>オレは理系で高学歴で頭がいいけど
>VBA始めたばかりの初心者です。
>上級者の道へとスキルアップするにはどうしたらいいですか?
こう並べると馬鹿極まりない文になるなw
内容も本人も馬鹿丸出しだが
0937デフォルトの名無しさん
2011/09/21(水) 22:43:55.40なんでもできると思ってるような勘違い君じゃないからいいんじゃね?
高学歴で頭がいいのはほんとかも知れないし。
得意分野以外は初心者と自覚するのは大事なことだ。
0938デフォルトの名無しさん
2011/09/21(水) 23:06:12.19頭がいいのと勉強が出来るのは別じゃね?
頭がいい奴は他人に勉強法なんか聞かんと思う
ごく身近に凄い出来る人間がいるとかならともかく、ネットは無いわ
まぁ勉強ができる奴がプログラミングに向いているかというと、
それはまた別の話だとも思うけど
0939デフォルトの名無しさん
2011/09/21(水) 23:30:08.43君のような強者を待ってたよ。
ここのスレで明日からルーキーとして質問に回答してくれいいい。
いい練習になるだろ
0940デフォルトの名無しさん
2011/09/21(水) 23:44:33.83おれも勉強ができても閃きの悪い奴はプログラミングには向いてないと思ってたが
最近は努力して覚えた知識だけでなんとかなること多いような気がする。
自分で編み出す力なんかなくてもなんとかなるし。
0941デフォルトの名無しさん
2011/09/22(木) 00:04:18.61まぁ実際何とかなるというか、要件は満たせる事は多いよね
でも自分でも「こんなんでいいのか…」と思う事も多い
さらにそれも数日もすれば「動きゃいいわ」に変遷していくがw
0942デフォルトの名無しさん
2011/09/22(木) 00:57:14.472chで回答がもらえるような質問の作成能力
要件を自分のスキルで出来るとこにもってく交渉力とか
ソフトウェア工学って職人が集まらなくてもある程度のものが出来あがるように
する方法論だよね。
3年で使い捨てていく業務システムなんかはそんな感じが求められてるのかも
0943デフォルトの名無しさん
2011/09/22(木) 05:50:39.49/で除算後、Intで切り捨てる>>890
\で整数除算し切り捨て不要にする>>892
WorksheetFunction.Floorを推す>>925
これで三つ巴か
なら俺は>>892を関数化した
function Floor(n as long) as long
Floor = (n \ 5) * 5
end function
を推すぜ
WorksheetFunction.Floorか演算かは、端的にはどちらが良いとも言えないが、
演算の場合に>>890より>>892の方が優れているのは間違いない
で、
> 名前のない計算より名前の付いた処理の方が保守性に優れる
の指摘は間違ってないけど、三角関数などのメジャー所ならまだしも
プログラムに置いて"名前の付いた処理"ってのは、使うのではなく作るのが基本
なので、名前を付けて関数化してしまえば、その言語内での保守性の高さは
WorksheetFunction.Floorと変わらないし、他の言語にもそのまま移植できる
汎用性の高さは、更なる保守性の高さにも繋がる
0944デフォルトの名無しさん
2011/09/22(木) 07:18:41.92高学歴なあなたには無縁だろうけど中小零細企業で働いて事務や管理の仕事ぶりを覗いてみるとVBAでする事はいっぱい見つかるよ。この規模の会社だとエクセルまともに使える人なんてあんまりいないのが現実だし。
VLOOKUP&MACH使う人が神扱いされてる事務所見たことあるよ。
0945デフォルトの名無しさん
2011/09/22(木) 07:27:38.72自分で編み出したものなんていうのは大抵とっくの昔に誰かが解法を持っている。
基本はプログラミングの定石を勉強してそれをどのように応用するかだけ考えれば
殆どの場合は事足りると思う。
>>941
自分で使うだけの場合は動きゃいいでいいんだけど
業務でしかも皆で使うなんてことになると、そうはいかない。
自分以外の人間がメンテナンスすることもあるし。
そもそもトータルで手を抜きたいと思う人は「動きゃいい」なんて作りは絶対にしない。
0946デフォルトの名無しさん
2011/09/22(木) 08:31:29.27自分で使うなら何でもいいんだよ。
何でもいいっていってもWorksheetFunctionの呼び出しは格段に遅いから俺は使わんけど。
人に使わせるときはそのFunctionは引数は整数に限るとかコメントしとくんだな。
実数だとWorksheetFunction.Floorとは返す値が全然違うからな。
ワークシート関数と同じ仕様の関数にして速度を上げるには
Function Floor(ByVal n As Double) As Long
Floor = Int(n / 5) * 5
End Function
ということになる。
0947デフォルトの名無しさん
2011/09/22(木) 08:38:02.700948デフォルトの名無しさん
2011/09/22(木) 08:46:48.445じゃなくてnな。
0949デフォルトの名無しさん
2011/09/22(木) 09:04:34.96引数が1個しかないよ...orz
つられて間違ったと言い訳しとく。
0950デフォルトの名無しさん
2011/09/22(木) 19:14:44.30今回も言い訳だらけ
この子、ダメだな
0951デフォルトの名無しさん
2011/09/22(木) 20:49:15.18コードの間違いは直せばいいだけのことだが、基地外は治らん。
0952デフォルトの名無しさん
2011/09/22(木) 20:55:59.12ある値を指定したときに、最も近い数字を探す方法として、
最短で探す方法を教えてください。
やはり配列に入れてループで比較ですか?
0953デフォルトの名無しさん
2011/09/22(木) 21:06:17.65そういうのは>>950が得意そうだな。
お手並み拝見と行きましょうかw
0954952
2011/09/22(木) 21:06:45.01配列の中央値と比較してから、
どちらかの方向に比較していけば、
半分ですみますね。
もっと良い方法あったら教えてください。
0955デフォルトの名無しさん
2011/09/22(木) 21:17:36.50> と、思ったんですが、
> 配列の中央値と比較してから、
> どちらかの方向に比較していけば、
> 半分ですみますね。
>
これを繰り返せばよいです、はい
0956952
2011/09/22(木) 21:26:44.67なるほど。ありがとうございます。
ちなみに、指定する値を比例して増幅させる
(任意の数値が0.0〜10000.0の範囲、指定値が0から5刻みで単調増加)
で結果を出したいのですが、更に短縮する方法を探しています。
感覚的には解法がありそうなのですが・・・ヒントあったら教えてください。
よろしくおねがいします。
0957デフォルトの名無しさん
2011/09/22(木) 21:37:33.670958デフォルトの名無しさん
2011/09/23(金) 01:01:18.21キーワードを挙げると、>>954は"二分探索法"と言うアルゴリズムですね。
そこから発展して"バランス木"というデータ構造もあります。
リレーショナルデータベースには必要不可欠なものです。
0959ベテラン高学歴イケメソ
2011/09/23(金) 06:44:31.56さらにそこから一定の数ごとに(ry
よっぽど膨大なデータじゃなければ普通にループ
0960デフォルトの名無しさん
2011/09/23(金) 09:02:08.58普通に二分探索でやると最悪19回の比較で答えが出るけど、もっと短縮したいってこと?
>>957の言うとおり、下手なこと考えるよりWorksheetFunctionが一番早かったりして
0961デフォルトの名無しさん
2011/09/23(金) 10:21:15.710962デフォルトの名無しさん
2011/09/23(金) 10:24:28.53検索する側とされる側のデータ量や間隔にもよるが、お互いにのぼり順のデータならそれなりのマッチングアルゴリズムが昔からあるだろう。
データによっては二分探索を使ってもいいだろうが、最初の中央値はそれまでに見つかった位置より後ろの中央にもっていかないとな。
常に同じ中央値では無駄だろう。
ってかこの質問した人っていつも暴れまわってるやつじゃねーのか?
0963デフォルトの名無しさん
2011/09/23(金) 13:48:47.48図and/or表ってなに?
Excelのなにかだということしかわからな
0964デフォルトの名無しさん
2011/09/23(金) 14:37:18.28つまりスレ違いなんですが・・・
0965デフォルトの名無しさん
2011/09/23(金) 14:43:16.630966デフォルトの名無しさん
2011/09/23(金) 17:47:11.96例えExcelのなにかだとしても、ここではなくBソフ板かPC初心者板のスレの方へ行くべき内容
スレ違い甚だしいにも程があるって話だw
0967デフォルトの名無しさん
2011/09/23(金) 18:26:00.920968デフォルトの名無しさん
2011/09/23(金) 23:41:25.06例えば
Dim selections as Range
Dim c as Range
selections = Selection
とやると、選択セルが変わったときに、cも一緒に新しい選択されたセルを見てしまいますか?
そして、
Set selections = Selection
とやると、今の選択範囲がselectionsにコピーされ、新しくどこか違う場所を選択してもselectionsに影響は無い、
と考えていいのですか?
それともSetはぜんぜん違う目的のものですか?
0969デフォルトの名無しさん
2011/09/24(土) 00:10:16.28Set r = Range(strCell)
でrはA1を指してるとします。
ここでA1の”A”っていうのを文字列で取りたいです
”AX1”なら”AX”を取りたい
どうしたらいいですか?
0970デフォルトの名無しさん
2011/09/24(土) 00:42:22.26後者はRange.Selectしてもselectionsの範囲が変わることはないです
前者は仕様上できません
前者後者共に動かせばすぐ分かることでしょう?
なぜ動かさないで質問したんですか?
0971デフォルトの名無しさん
2011/09/24(土) 00:45:52.08実体のコピーではなく実体への参照
しかしSelectionはオブジェクトではなくRange型を返すプロパティなので
=Selectionによって参照代入されるのはSelectionそのものではなく
Selectionが返したRangeオブジェクト
よって、参照代入後に選択セルが変更されても、selections変数には影響ない
>>969
r.Row
0972デフォルトの名無しさん
2011/09/24(土) 00:50:09.44他にもやりようがあるかもだけど とりあえず
Adr_Str = r.Address(True, False)
Col_Str = Left(Adr_Str, InStr(Adr_Str, "$") - 1)
Debug.Print Col_Str
0973デフォルトの名無しさん
2011/09/24(土) 01:26:22.04ありがとうございます。
動かしてその結果だけで判断って危険じゃないですか?w
なので聞いてます。
前者は文法的にダメってことでこちらは失礼しました。
勘違いで出来ると思って書いちゃいました
0974デフォルトの名無しさん
2011/09/24(土) 01:33:33.11>=Selectionによって参照代入されるのはSelectionそのものではなく
>Selectionが返したRangeオブジェクト
それはちょっとちがう
オブジェクトに対して(Setなしの)=で代入、参照されるのはそれぞれの既定のプロパティの値
Rangeの規定のプロパティはちょっとややこしいが、この場合はValueだと思って良い
Dim c As Range
Set c = Sheet1.Range("A1")
Range("B1").Select
c = Selection 'これはc.Value = Selection.Value
これでB1セルのValueがA1セルのValueに代入されるが、cはずっとA1を指したまま
0975デフォルトの名無しさん
2011/09/24(土) 01:51:20.97前者も文法的には問題ないぞ。事実コンパイルは通るだろ
>>968でselections = Selection が実行時にエラーになるのは、
selectionsの既定のプロパティに値を代入しようとしたんだが、
selectionsは有効なRangeオブジェクトを指して無かったからだ
動かしてその結果から判断するのは、場合によっては必要だが
動かしてその結果「だけ」で判断するのは危険
0976デフォルトの名無しさん
2011/09/24(土) 03:31:11.59つまりDim selections as Range
ってやっただけではselectionsはC言語でいうところの、未初期化のポインタで、
Range ** pRange = NULL;
Range rng;
*pRange = &rng;
みたいな事で、
Setを使うと
Range ** pRange = NULL;
Range rng;
pRange = (Range *)malloc(sizeof(Range));
*pRange = &rng;
みたいなことなんですかね。
0977デフォルトの名無しさん
2011/09/24(土) 05:00:17.38「代入」ではなく「参照代入」ってのはSetを付けた場合の話だから
「ちょっとちがう」というのは不適切
>>971は参照代入における正解で、>>974は代入における正解だから
「ちょっとちがう」という反論ではなく、「>>971は参照代入の話だが、代入の場合は〜」と
補足する形を取るのが本当の正解
0978デフォルトの名無しさん
2011/09/24(土) 09:42:19.64画面に表示するのがSelectで
オブジェクト操作の対象として選択することが
Activateなのでしょうか。
その両方を実現したい時はSelectした後Activate
する必要があるのでしょうか。
0979デフォルトの名無しさん
2011/09/24(土) 12:49:27.30参照代入って単語は初めて聞いた
VBA "参照代入" でぐぐると 約 791 件 (0.11 秒)
少なくともVBAでは一般的に通用する用語ではないと思われ
0980デフォルトの名無しさん
2011/09/24(土) 13:06:25.450981デフォルトの名無しさん
2011/09/24(土) 20:33:06.24リアルタイムにフォームのテキストボックスに表示する方法を教えて頂けないでしょうか?
使用環境は
エクセル2002
OS XP
です
0982デフォルトの名無しさん
2011/09/24(土) 20:51:32.460983981
2011/09/24(土) 21:05:33.64すみません
表現が間違っていたかもしれません
セルに値を入力してエンターを押して変更が確定した後ではなく
確定する前の現在入力中の文字列を取得して
テキストボックスに表示したいのです
APIなどを利用すれば可能なのかもしれませんが
具体的な方法がわからないのです
どなたかよろしくお願いします
0984952
2011/09/24(土) 22:58:52.05試してみたいと思います。
0986デフォルトの名無しさん
2011/09/25(日) 00:58:37.800987デフォルトの名無しさん
2011/09/25(日) 09:04:17.94ExcelVBAの分野ではないから、とりあえずスレ違いだね
まあ具体的な方法とか聴く前に、自分こそ具体的に何がしたくて
そういう動作を求めているのかを書けば、VBA分野で別な方法が
あるかもしれないけどね
0988デフォルトの名無しさん
2011/09/25(日) 09:58:30.680989デフォルトの名無しさん
2011/09/25(日) 10:10:10.58普通はやらないけど
0990デフォルトの名無しさん
2011/09/25(日) 15:13:31.960991デフォルトの名無しさん
2011/09/25(日) 15:21:28.35次スレ案内
Excel VBA 質問スレ Part21
http://hibari.2ch.net/test/read.cgi/tech/1316931607/
0992デフォルトの名無しさん
2011/09/25(日) 15:30:43.800993デフォルトの名無しさん
2011/09/25(日) 15:37:10.330994デフォルトの名無しさん
2011/09/25(日) 15:45:58.99「図としてコピー」というコマンドで任意のセル範囲を図形としてコピーできる
あとはそのコピーされた図形を頑張ってjpg保存とかすればいいと思う
0995デフォルトの名無しさん
2011/09/25(日) 15:52:36.53おつ
0996デフォルトの名無しさん
2011/09/25(日) 16:15:15.22|:::::::::::::::
∧_∧::::::::::::
__ (´・ω・`) :::::::: すみません、ここでうんこしていいですか?
◎ー) / \:::::::::
| | (⌒) (⌒二 )::::::::::::
~~~ /⌒ヽ( ̄、 ヽ___
/ Lヽ \ノ___
゙ー―――(__)---
0997デフォルトの名無しさん
2011/09/25(日) 16:16:28.020998デフォルトの名無しさん
2011/09/25(日) 16:16:49.180999デフォルトの名無しさん
2011/09/25(日) 16:17:03.741000デフォルトの名無しさん
2011/09/25(日) 16:17:16.7910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。