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


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

Excel VBA質問スレ Part9



1 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 15:42:51 ]
ExcelのVBAに関する質問スレです

前スレ pc11.2ch.net/test/read.cgi/tech/1219673793/

★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)


641 名前:630 mailto:sage [2009/01/24(土) 22:09:05 ]
>>638
>エラーを無視するのは行儀は悪い
エラー処理って大そうに考えてる人多いみたいだけど、
俺はエラー処理ってのはプログラムの効率化を図る手段だと思ってる

実際にErrorステートメントなんか存在しなくても、
厳密なプログラムを書けば99.9%(経験上100%)同じことはできる

Errorステートメントってのは、あらゆる場面を想定した厳密なプログラムを
書かなくてもいいように効率化(手抜き)をするためのモンじゃないの?

642 名前:635 mailto:sage [2009/01/24(土) 22:15:04 ]
>>640
639の地域と言語のオプションというのはもちろんコントロールパネル内のやつの一項目です。
変なところは無いみたいですし、そもそも購入してからいじった覚えもありません。

現状どのEXCELシートでも9/8/7と入力すると2009/8/7に置き換わって問題ないようにみえます。


643 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 22:19:03 ]
>>642
A1セルに09.08.07じゃなくて、9/8/7っていれてみ

644 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 22:22:37 ]
確認するんならA2セルに9/8/7と入れてみるべきじゃないかな
書式の問題かもしれないし

645 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 23:11:33 ]
>>643>>644
A1A2セル共に9/8/7と入れれば09.08.07に自動で置き換わりますので書式には問題は無い様に思えます。
ちなみにA1セルに9/8/7と入力して635の処理を走らせると2009/8/7が20/9//8/に置き換わるだけでした。

それとMid関数を利用してピリオドをスラッシュに置き換えても結果は同じ07.09.08でした。

この処理の目的としては日付欄なのに入力の際にピリオドを直接入力している間違った記述を一括で直したいというのがあるのですが
どうしてこんな順番入れ替わりがおこるのかが本気で謎です。


646 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 23:48:18 ]
>>645
DateSerialをかますんだ!

Dim s As String
If TypeName(Range("A1").Value) = "String" Then
  s = Range("A1").Value
  Range("A1").Value = DateSerial(Left(s, 2), Mid(s, 4, 2), Right(s, 2))
End If

647 名前:635 mailto:sage [2009/01/25(日) 07:49:29 ]
>>646
確認しましたが、それで大丈夫みたいですね。
ありがとうございました。

648 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 17:56:18 ]
Open ファイル名 For 開き方 As #ファイル番号

というコマンドの「#」の意味を調べてみたんですが
言及されてなくてわかりません。
この#にはどんな意味があるのでしょうか?

649 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 18:08:33 ]
あるブックをアクティブにすると同時にマクロを走らせることって可能ですか?



650 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 18:25:52 ]
>>648
「#」は「ナンバーサイン」とも言う。そして、例えば「2番目のvoid」を「void#2」とも書く。
その意味を込めてMS-BASICで採用された仕様だ。

651 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 18:55:24 ]
>>649
Workbook_WindowActivate

652 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 19:04:08 ]
>>650
ほえー!ずぅっとシャープだとばかり思ってました。
番号を表す「ナンバーサイン」という記号だったんですね。
勉強になりました。ありがとうございます。

>>649
そのブックに、Auto_Open()のモジュール名で記述されたプログラムは
ブックを開くと同時に実行されます。

653 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 19:08:00 ]
開くときではなくアクティブにしたときでしょ?

654 名前:652 mailto:sage [2009/01/25(日) 19:12:30 ]
確かに。読み間違えました。
どうもすみません。

655 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 19:40:49 ]
>>651
ありがとうございます。

もう一つ質問です。

非アクティブ状態のシートのアクティブセルの参照はどうすればいいでしょうか?
現在ブックBがアクティブ状態で

Cells(1, 1) = Workbooks("A.xls").Worksheets(1).ActiveCell.Offset(0, 1)

のような処理はオブジェクトはプロパティ・メソッドをサポートしてないと言われました。
ブックAをアクティブにしたくないのですけど、やはりブックAをアクティブにしてからでないと無理ですかね?

656 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 20:29:26 ]
そもそも、ちょっと考えてみれば当然のことだが
アクティブじゃないシートにはアクティブなセルなど存在しない

それにActiveCellはWorksheetオブジェクトのメンバではなくExcelオブジェクトのメンバなので
上位オブジェクトを指定するならExcel.ActiveCellのようになり、Excel以外は指定できない

つまり、「(A):非アクティブなシートのアクティブセル」って概念自体が間違いであり
君がやりたいことは「(B):非アクティブなシートが最後にアクティブだったときにアクティブだったセルの取得」
と表現するのが正しい

というわけで、存在しないもの(A)は取得できないので、(B)を取得するには
任意のシートにアクティブセルが存在するようにしてやる(任意のシートをアクティブにする)か、
アクティブセルの移動を監視記録するのどちらかだな
表示を止めてアクティブにしたのが見えないようにも出来るが、それでも前者が嫌なら後者しかない

657 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 21:02:48 ]
うぜーよ

658 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 22:30:01 ]
べつにうざくはないが、よくそこまで親切にレスできるのかと関心する
職場で部下に教えるならまだしも、2ちゃんで赤の他人に教えるだけで

659 名前:デフォルトの名無しさん [2009/01/25(日) 23:23:32 ]
EXCEL97です
ActiveSheet.PageSetup.LeftHeader = "&18 1月12日 &A"
このなかの1月12日の部分をnow()+2かstring型の変数を使いたいのですが方法はありますか



660 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 23:36:15 ]
ActiveSheet.PageSetup.LeftHeader = "&18 " & Format(Now() + 2, "m月dd日") & " &A"

661 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 23:51:02 ]
>>656
丁寧にありがとうございます。

>アクティブじゃないシートにはアクティブなセルなど存在しない
これが確認できれば出来れば十分です。


662 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 16:18:41 ]
ActiveとSelectを混同してると見た
俺がちょっと前までそうだったから

663 名前:デフォルトの名無しさん [2009/01/26(月) 19:12:35 ]
質問です。
データをシステムから取り込んだエクセルファイルなんですが、
セル内の数値の先頭に半角スペースがついてしまいます。
たぶんこれが原因で、数値の大小がおかしくなります。

例えば

変数=20.222
if 変数>10.333 then

これで =falseとなるんですが何か対処法はないでしょうか。
セルをダブルクリックしてEnterで先頭のスペースは消えて数字扱いとなります。
セルの書式は未選択状態です。
ファイルがで手元にないので詳しいことはすいません。


664 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 19:51:29 ]
>>663
変数="20.222 "
if value(trim(変数)) > 10.333 then

665 名前:664 mailto:sage [2009/01/26(月) 19:58:01 ]
すまん、ワークシート関数と勘違いしました。
val(trim(変数))

666 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 20:58:54 ]
>>663
元のデータは変えちゃいけなくて、VBAでなんとかするなら上のレスのとおり。
修正してもいいんならシート全体を選択してコピー→そのまま貼り付けして、
黄色いびっくりマークをクリックして「数値に変換」

667 名前:デフォルトの名無しさん [2009/01/26(月) 20:58:56 ]
質問よろしいでしょうか。
乱数を生成させて、結果によって単純な算術演算を行うプログラムで統計を取っています。
会社のPCで結果が出るまでに2時間はざらなのですが、

会社のCPUがpen4 3Ghz
自宅のCPUがcore i7 940 2.93Ghz

単純なプログラムなので、劇的にはかわらないまでもすこしは早くなるかと思ったんですが、
逆に遅くなりました。
8コア中 1コアしか使用率があがらなかったので、単純にクロック数の問題だと思うのですが、
VBAで8コアフルに稼動させるようなソースは書けるんでしょうか?

しかし、前の乱数値の結果が次に影響するような演算なので、
追い越してなにかを処理しておくというのは意味なさそうです。

668 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 21:00:29 ]
>>663
csvでも取り込んでいるのかな? csvファイルの仕様がおかしいんで内科医?

669 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 21:04:13 ]
>>667
そりゃ無理だ。VBAが今後マルチスレッド化されたとしても、単純なプログラムでは1コアしか使いようがない。
まさかとは思うが、シートの更新を止めてないとか言わないよな。



670 名前:667 [2009/01/26(月) 21:10:32 ]
>>669
ですよね;−;
シートの更新は止めています。
シートへのアクセスも極力抑えて、演算に必要な数値はすべて配列で確保しています。
実行時間は単純に量の問題です、10億試行とかそういう回数なので…

671 名前:デフォルトの名無しさん [2009/01/26(月) 21:11:18 ]
www.nicovideo.jp/watch/sm5947975

672 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 21:14:15 ]
>>668
単純なcsvの読み込みなら、たとえ "  123   " みたいにダブルクォートで囲ってあっても
強制的に数値化されてしまうので逆に困るくらい。

673 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 21:17:18 ]
>>670
そんなに回数が多いならVBAじゃなくてもっと演算向きの言語にしなよ。
必要ならそいつをVBAで起動すればいいんだし。

674 名前:デフォルトの名無しさん [2009/01/26(月) 21:18:21 ]
664-666
ありがとうございます。
明日試してみます。


675 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 21:23:52 ]
>>670
10億回程度のループならそんなに多いとは思わんけどな。

無駄に時間のかかるプログラムって、アルゴリズムやコーディングに問題があることが多いけど、
誰か詳しい人には相談した?
それから基本的なこととしては、Variant型の変数は使ってないよな?

あとは乱数の発生を別のプロセスにやらせてファイルにどんどん書き出していくとか、
そもそも数値計算にVBAを使うこと自体が疑問なので、全体をコンパイラで書き直すとか。

676 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 21:26:21 ]
675の言うことには耳を貸さないのが吉

677 名前:667 [2009/01/26(月) 21:43:17 ]
いろいろアドバイスありがとうございます。
すいません統計などと洒落たことを言ってしまいましたが、
プログラム自体はパチスロ機のシミュレータです。
自分ひとりでつかうならいいんですが、
プログラム知識0の人へのインターフェイスや出力、視覚化も兼ねているので…。
そして残念なことに、このシミュレータの作成は片手間でやらないといけないので、
うまいこと作り直す時間も知識もありません…。
同じ課でたまたまプログラムの知識があった私が任されています…
ので同じ課にはわかる人はいません…。
もちろん実機担当に質問はできますが、手一杯だとは思います…。

アルゴリズムはやりようがあると思いますがなるべく実機に近くなるようにしています。
実機はもちろん人の操作によって一連の流れになるので、
アルゴリズムも単純な上から下です。

実行時間は現状でそれなりに満足しています。
10億試行は最終的段階なので、普段は5分とかそういうレベルです。

ただ、環境(CPU)による違いがなかったので質問した次第です。
気遣いありがとうございました。

678 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 22:31:23 ]
会社のCPUがpen4 3Ghz
自宅のCPUがcore i7 940 2.93Ghz
で逆に遅くなるってのは悲しいな
結局クロックが全てか
てか
実機担当って職業プログラマーが居る、その会社は何だろう
気になる


679 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 22:41:48 ]
パチンコ機屋じゃないの?



680 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 23:30:39 ]
>>678
うちは北森コアのPen4 3.4CGHzとi7 965(3.2GHz)を使ってるが
1スレッド処理でもi7の方が速いぞ

そもそもCPIもバス帯域もメモリコントロールも拡張命令も勝っているi7が
0.07GHz程度の実周波数の差程度でPen4に負けるのはおかしい
会社のPCがベースクロック3GHzの石を使ってOCしてるとかじゃなければ
君が自宅で使ってるi7のPCは、構成に問題有りで何処かに極端なボトルネックが
発生していると思われる

681 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 23:32:56 ]
質問です。

EXCELシートにハイパーリンク貼って、そのシートをブラウザでプレビューすると
ブラウザにもハイパーリンクが表示されるけど
そのブラウザ上のリンクをクリックした時に
Private Sub Workbook_SheetFollowHyperlink
を起動することってやっぱ無理かな?

682 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 23:38:43 ]
>>680
自宅PCは省電力でクロックダウンしているんじゃないか?

683 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 23:59:12 ]
>>681
自分でHTMLとVBScript or JavaScriptでそういうコードを書けばできなくもないだろう。
つまり、VBAでは無理だ。

684 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 00:37:43 ]
何かにCPUパワーを喰われてるとか
「遅くなった」のが実は0.01秒程度の差だったとか
もし自作ならドライバがちゃんと入ってないとか

685 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 04:47:10 ]
CommandButtonでClickイベントが呼ばれたときに、そのボタンのキャプションを取得したいのですが、
よい方法はありませんでしょうか?

ネットのフォーラムなどの情報では、
 ActiveSheet.Buttons(Application.Caller)

 ActiveSheet.DrawingObjects(Application.Caller)
などでオブジェクトを取得できるとあるのですが、
プロパティがない、などと言われます。
代替手段はないものでしょうか?

環境:Excel2007



686 名前:685 mailto:sage [2009/01/27(火) 04:54:33 ]
すいません。そもそも _ClickイベントやMouseDownなどではApplication.Callerは使えないですね。
どうしたらよいのだろうか

687 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 05:11:01 ]
>>686
押したボタンのクリックイベントに適当に書くのが普通じゃない?




688 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 05:23:04 ]
>>685
コマンドボタンには2種類あるでしょ。
挿入を選ぶとコントロール(部品)の一覧が出てきて
上段が「フォーム コントロール」、下段が「ActiveX コントロール」ってなってるやつ。
下段の方のボタン使ってる?

689 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 05:38:13 ]
>>685
「マクロの登録」で登録されたマクロはコマンドボタンのクリックで呼び出される
Sub test()
  MsgBox ActiveSheet.Buttons(Application.Caller).Caption
End Sub



690 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 05:43:14 ]
>>688
マクロが登録できるのはフォームコントロールの方だぞ

691 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 06:11:34 ]
>>686
そもそもCommandbutton1のClickイベントで呼ばれるのはCommandbutton1_clickなんだから、
Private sub commandbutton1_click
  Msgbox commadbutton1.caption
End sub
で、いいんじゃねーの?
クラスモジュール使って擬似コントロール配列にしてるとしても、どうにでもなんじゃん
アホなの?

692 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 07:45:56 ]
>>690
両方出来るぞ

693 名前:685 mailto:sage [2009/01/27(火) 10:53:06 ]
教えて! Watch Excel VBA Application.caller エラー2023について
oshiete1.watch.impress.co.jp/qa4024188.html

ここの方法でいけましたが、もう少しスマートな方法がないかな?と。

>>687 >>691
10個あったら、10個分イベントと名前の組をかかないといけないですよね。
冗長性があります。

>>689
ActiveXの方では無理っぽいです・・・

>>688
ActiveXの方を使っています。
やりたいことはボタンのキャプションを取得することなので、
できるのであればフォームコントロールの方でもよいのですが・・・

694 名前:685 mailto:sage [2009/01/27(火) 10:57:08 ]
URL間違えました。こちらでした。

moug|即効テクニック | コマンドボタンのクリックイベント内でボタン名を取得するには
www.moug.net/tech/exvba/0150059.htm


695 名前:デフォルトの名無しさん [2009/01/27(火) 16:07:22 ]
シート保護はprotectで非保護はunprotectでいいですか?出先なので簡単な質問ですが。

696 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 16:13:46 ]
>>695
いんじゃね

697 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 16:19:40 ]
ありが十匹!!

698 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 20:14:57 ]
>>693
一つのプロシージャに1行ずつ書き足すのが冗長性があると言ってるってことは、
擬似コントロール配列を使ってクラスモジュールで処理してるとしか考えられない訳だから、
取りあえず今使ってるソース出せ
そしたら改良してやるから

699 名前:デフォルトの名無しさん [2009/01/29(木) 09:07:22 ]
すみません初心者ですが質問です。
Msgboxに「月度を入力してください」と表示
→インプットboxに月(1〜12までの数字)を入力する画面を出して尚且つ、
1〜12以外の数字または文字を入力したら、「1〜12の数字を入力してください」
というエラーメッセージが出る→最後にまたMsgboxが出てきて「○月度ですね」と
表示するにはどう組めばいいでしょうか。
○には入力した月数を出したいのですがよろしくお願い致します。



700 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 09:08:34 ]
>>699
VB初心者スレへどうぞ。

701 名前:デフォルトの名無しさん [2009/01/29(木) 11:00:04 ]
>700
すみません、VBAの初心者スレは探しましたが無いみたいです。
どなたかお願い致します。

702 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 12:15:27 ]
>>699
流れは大体できてるように見えるのだが・・・
「インプットboxに入れられたものを数値にして1〜12だったら抜ける」ってことを
Do〜Loopを使って組めばいいだけ

703 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 14:29:53 ]
超初心者です。

何個か開いたファイルの中から、特定のファイルを探す。
という単純な事がしたいのですが
ファイル名が例えば「経理ファイル200812.xls」のように、
月によってYYYYMMの部分が変わってしまいます。
開いたファイルの中から、ファイル名に「経理ファイル」が付いているファイルをアクティブにしたい場合
どのようにすればよいでしょうか。
ワイルドカードが使えないかと思ってやってみているのですが
よろしくお願いします。


704 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 15:01:32 ]
dim b as workbook
for each b in workbooks
if b.name like "経理ファイル*" then
b.activate
end if
next

705 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 15:53:30 ]
>>704

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

706 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 18:39:44 ]
質問です
h = 1
Do Until Cells(h, 6).Value = ""
If Cells(h, 3).Value = Cells(h + 1, 3) Then
Cells(h, 6).Value = Cells(h, 6).Value + Cells(h + 1, 6).Value
Rows(h + 1).Delete
End If
h = h + 1
Loop
2行のときは1行にできるのですが、3行以上のときも1行にしたい場合どのようにすればよいでしょうか

707 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 18:57:21 ]
>>706
最初に見つけた位置のhを保存しといてそこに入れていく

708 名前:707 mailto:sage [2009/01/29(木) 19:00:08 ]
違ったな
「Deleteしたときはhをインクリメントしない」かな?

709 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 19:45:32 ]
End Ifの前にh = h - 1で解決しました
ありがとうございます



710 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:41:33 ]
>>701
頭だけでなく眼が悪いんでしょうか。
VBA ( V B A ) のスレではなく、VB ( V B ) のスレへどうぞ。

711 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:59:42 ]
OS XP
EXCEL2003

dteProductDay=format(date,゙yyyy/m/d゙)
cells(1,1)=dteProductDay
というように、システムの日付を整形してセルに表示させたいのですが、
フォーマット通りに表示されず1/29/2009となります。何が悪いのでしょうか。

712 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 00:09:19 ]
>>711
書式を変えるか、または文字列で

713 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 02:12:09 ]
>>711
的外れかも知れないが
表示するセル自体の書式を適切に設定しないとそうなる。
そのフォーマットだと、変数に代入された値は2009/1/29となるので
エクセルはこれを日付と認識し内部的に日付のシリアル値として値を保持するのでは。

たとえばdteProductDay=format(date,゙yyyy m d゙)
とするとセルには「2009 1 29」と表示される。


714 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 12:23:35 ]
OS-XP
Office2003

Shiftキーを押しながらドラッグでセルの移動ができますが、
Shiftキーを押さなくても常にセルを移動することはできますか。

もしくはExcel上でのみ、Windowsの固定キー機能のように
Shiftキーを押しっぱなしにすることはできないでしょうか。

キーボードでなら、たとえば上に移動したい場合
ActiveCellを取得して、真上のセルと置換していけばできそうなんですが。

715 名前:711 mailto:sage [2009/01/30(金) 20:50:12 ]
>>712-713
ありがとん

cells(1,1)= "'" & dteProductDayでうまくいきました。


716 名前:7777 mailto:sage [2009/01/30(金) 22:31:30 ]
エクセルでシート1で例えばF団体をA列の1で書いてそれを
シート3のD列の3に自動記入させるマクロは分かるんだけど

シート1でF団体がA列の1以外になっても自動記入できるマクロある?
あるなら教えて

717 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:07:32 ]
日本語で質問できない人お断り

718 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:08:56 ]
>>716
Private Sub Worksheet_Change(ByVal Target As Range)
                        ~~~~~~~
どこに書き込まれたかはTargetという変数に入ってる

719 名前:7777 mailto:sage [2009/01/30(金) 23:13:26 ]
718さん
意味がわかりません




720 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:18:17 ]
日本語読めない人お断り

721 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:31:13 ]
Worksheets("シート3").Range("D3") = Worksheets("シート1").Range("A1")
みたいにセル名が固定ならわかるけど、コピー元のセルが不定の場合はどうするかって質問でしょ?

722 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:53:13 ]
F団体ってなんだろ…新しい宗教か?

723 名前:7777 mailto:sage [2009/01/31(土) 08:51:59 ]
>>721
うん!!そのとおりです

724 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 09:19:07 ]
>>723
A1とA2の両方に値がある場合はどちらを採用するの?

725 名前:7777 mailto:sage [2009/01/31(土) 09:52:09 ]
>>724
1月23日 団体名  内容
       F団体
       

このときF団体がAの2列に書いてるけど
Aの2列にD団体を記入して
Aが3列になってもシート3のまとめシートには自動記入できるかなぁって

726 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 10:06:03 ]
>>725
1対1対応ならなんの問題もないでしょう?

それから行と列を区別して書いてたほうが他人に伝わりやすいですよ。
ABCは列
123は行


727 名前:7777 mailto:sage [2009/01/31(土) 10:42:31 ]
A列からD列の10行までの範囲がコピー範囲のときは
どうマクロ組むの?

728 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 11:15:45 ]
>>727
マクロ記録してみたら?

729 名前:7777 mailto:sage [2009/01/31(土) 11:34:10 ]
できました!
ありがとうございました。



730 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 11:39:37 ]
俺が質問を理解できないうちに解決か

731 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 13:05:52 ]
>>730
VBAを使うやつは問題をミクロにとらえ過ぎている。
もっとマクロなレベルで考えるんだ。
コピー元とコピー先の対応がどうなっているかだけ理解したらできるかできないか判断できるだろ?


732 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 15:18:32 ]
EXCELを使うのは本来はすんごく高度なスキル(=異常な思考様式)が必要
そうでもない人、もしくはそういう発想をするのがヤな人がVBAを使うのだが、
VBAは最高級のBASICの一つで、これだけでも結構重量物
(VB.NETはこれは超ベテランが使う言語で、これからいきなり始めるのだ
けはやめたほうがいい)
VBAの入門に向いているのはExcelよりかAccessだね。Excelだと動作
は遅いはExcelと基本的に合わないわでロクなことないね。

733 名前:7777 mailto:sage [2009/01/31(土) 15:24:34 ]
いやできてないんだけど
マクロ記録とは?

734 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 16:13:28 ]
もういいから帰ってくれ!


735 名前:7777 mailto:sage [2009/01/31(土) 17:09:51 ]
ひどすぎ

736 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 17:10:34 ]
>>725
マクロの前に日本語を勉強した方が…
でも一応想像してみた

シート1
年月日  団体名  内容
1/23   F団体  陳情
1/26   D団体  年始挨拶
1/27   A団体  予算ヒア
みたいに日付ごとの日報が書いてあって
団体ごとに各シートに抽出したいんじゃないのか?
でもこれだったらわざわざ聞いてこないよな。

737 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 17:50:16 ]
確かにそれだったらその辺のOL捕まえた方が手っ取り早いな。

738 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 19:48:09 ]
長文ですがお許しを
最近クラスモジュールを勉強しているんですがプロパティの設定で
Letがうまくいきません。

WindowsXPSP3、Excel2003
クラスモジュール内容
Private m_TestValue As String

Public Property Get TestValue()
TestValue = m_TestValue
End Property

Public Property Let TestValue(ByVal New_Value As String)
m_TestValue = New_Value
End Property

で標準モジュールに
Public Sub Test()
Dim Test As Class1
Set Test = New Class1

Test.TestValue = "testtest"
MsgBox Test.TestValue
End Sub

として実行するとプロパティプロシージャの定義が一致していないというコンパイルエラーが出ます。
これはなぜでしょうか?

739 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 20:07:43 ]
Public Property Get TestValue() As String
もしくは
Public Property Let TestValue(ByVal New_Value As Variant)

Getの戻り値の型と、Letの最後の引数の型
つまり、ひとつのプロパティの型は一致させてください




740 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 21:01:13 ]

なるほど!Property Getの戻り値も型を指定する必要があるんですね。
m_TestValue変数の型を指定していてそれを返しているから
てっきりそれだけでいいと思ってた。

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

741 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 00:36:34 ]
ブックAにブックBへのハイパーリンクを張って、ブックBの
Private Sub Workbook_Open()
内で色々と処理をしているのですが、
ブックA内のハイパーリンクをクリックした時にブックBを表示させずにその後の処理を実行する方法はありませんか?







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

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

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