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


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

Excel VBA質問スレ Part10



1 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 04:56:43 ]
ExcelのVBAに関する質問スレです

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

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

357 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 17:30:13 ]
オートシェイプをスプライトに見立てて作ったゲームってのも
あってもよさそうだが見たことがない。
みんなワークシートにドット絵を描きたがるのはなんでだろう。

358 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 17:54:34 ]
>>357
座標関係じゃね?セル位置のほうが初心者には直感的。
もしくは、オブジェのNewとか、オブジェクトの一意のID指定がメンドイとか。

個人的には、VBAで2Dゲームは初心者に向いてると思う。
描画の基礎は勉強できるでしょ。

359 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 18:06:52 ]
>>352
スレチだが言語によると思うぞ。俺はVC/JAVA屋でC#に四苦八苦。
さらにDirectXなんかは思想の理解にてこずるし。
まあ、言語というよりはフレームワークの問題だが・・・

あと、半月くらいVB系触らないと構文殆ど忘れるしw

360 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 19:53:36 ]
>>354
アラン・ケイの本に、セルを使って棒グラフを表現する例が載っていたから、
画期的なアイデアと言うほどではないな。

361 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:30:03 ]
すいません。次のことをしたいのですが、簡単だと思ったのですが、
出来なく困っています。

最初にB列の任意のセルを一つ選び、
その選んだB列のセルに、常にR24のセルをコピーし
貼り付けたいのですが、色々やりましたが出来ません。

例えば、
セルB28を選び、マクロを実行したらR24をコピーし同じくB28に貼り付ける。
セルB30を選び、マクロを実行したらR24をコピーし同じくB30に貼り付ける。
セルB77を選び、マクロを実行したらR24をコピーし同じくB77に貼り付ける。

たったこれだけのことですが、このマクロの部分が相対参照にしても出来ません。
識者の方宜しくお願い致します。
なお
EXCEL;ver2000
OS:win2000
VBA;多少使えます。

宜しくお願い致します。

362 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:43:12 ]
ActiveCell = Range("R24")

> VBA;多少使えます。
それはないだろ…

363 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:55:31 ]
lol

364 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:58:01 ]

デフォルトプロパティを省くな


365 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:58:10 ]
>>362
有難うございます。しかし調べ、いろいろ試し下記のコードを作成したのですが・・・

ActiveCell = Range("R24").Copy
ActiveCell.Offset(30, -2).Range("A1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
End Sub

↑出来ませんでした。R24だと手間が掛かってしまうと思うので、

任意のB列のセルにセルA1の値をコピーし貼り付ける。

という例で結構ですからコードをお願いできないでしょうか?

例えば、

セルB5を選び、マクロを実行したらA1をコピーし同じくB5に貼り付ける。

たったこれだけで良いです。宜しくお願い致します。



366 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 11:45:26 ]
cell(2,5).value = cell(1,1).value
cell(2,5).interior.colorindex = RGB(255,255,255)
こんな感じだった気がする

367 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 12:16:38 ]
>>366
cell → cells
colorindex → color

368 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 12:34:13 ]
セル情報全部コピーしたいって前提なら、↓で良いと思うがね。

Sub test()
Cells(1, 1).Copy ActiveCell
End Sub

369 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 12:39:14 ]
「R24だと手間」があったからValueにしてみた
色は関係ないのか。斜め読みスマソ

370 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:27:59 ]
>>365
VBAがまったくわかってないようなんで、ヒントじゃなくて完成したマクロを書いといてやる。

Sub Macro1()
  ActiveCell = Range("R24")
End Sub

371 名前:365 mailto:sage [2009/03/22(日) 17:16:18 ]
皆様本当に有難うございます。
只今仕事からかえってきました。んでまた仕事ですorz。
報告は後ほどさせて頂きます。

372 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:25:56 ]
>>370
プロパティを省略するな。と何回言わせるのだ・・・。

373 名前:デフォルトの名無しさん [2009/03/22(日) 21:30:20 ]
openのメソッドを勉強中ですが、
「updatelinks」引数の説明の中で、
「リモート参照」と「外部参照」という2つの言葉が出てきました。
「リモート参照」「外部参照」とはどういう意味ですか?
ググってみても出てきませんでした
(T_T;)。

374 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:19:52 ]
>>372
ケチつけてるヒマがあったら正解を示せ。と何回言わせるのだ・・・。

375 名前:デフォルトの名無しさん [2009/03/22(日) 22:54:11 ]
Sub test()

selection.value=range("A1").value

End sub

A1の値を今選択しているセルの値に





376 名前:デフォルトの名無しさん [2009/03/22(日) 23:03:17 ]
↑あ、説明間違った。
今選択しているセルにA1の値を入れると。
ちなみにこの場合はActivecellよりselectionの方がいいと思うよ。

377 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 23:08:07 ]
>>374
え、付けるべきプロパティが解らないの?

コードが根本的に間違っていると言ってるわけじゃないのに
それでも「正解を示せ」と言うからには、それくらいしか思いつかない…

378 名前:365 mailto:sage [2009/03/22(日) 23:33:25 ]
365です。
あれから>>370さんのコードをそのまま頂いたら、
出来ました!!!
>>370さん本当に感謝です。
コードまでそのまま書いてくださり大変助かりました。
しかしこんな簡単なコードで出来るとは、
拍子抜けです。
勉強不足を感じました(汗。感謝。

>>366さん
>>368さん
わざわざ有難うございます。
どうやら私の説明が悪く、
何をしたいのか正確に伝えれなかったみたいです。
アドバイスいただきましたが、
それとはちょっと違いました。
ですが親切に本当に有難うございました。

ではお騒がせしました(ぺこり

379 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 23:34:11 ]
>>378
>>362

380 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:01:22 ]
おれが即座に>>362でレスしたのはスルーだったわけだ

381 名前:365 mailto:sage [2009/03/23(月) 00:07:42 ]
>>380

いえ、>>365の最初

ActiveCell = Range("R24").Copy

で使わせてもらいました。
>>362さん=>>370さん
だと思っていたのですが・・・。

最初に回答を頂いていたようで有難うございます。
しかし、これは「ヒント」だと思ったので、
>>365のような長居コードになってしまいました。

382 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:08:34 ]
>>377
なんか本気で自覚がなさそうだから親切に教えてあげるけど、
デフォルトのプロパティがどうとか正解が知りたいんじゃなくて
「煽りがウザイ」って遠回しに言ってるんだと思うぞ。

プログラマーの精神年齢が低いのは世界共通の現象らしく、
とある海外のプログラミングの入門書にも
「まず大人になれ」みたいに書いてあって吹いたわ。

383 名前:デフォルトの名無しさん [2009/03/23(月) 00:10:19 ]
プロパティの重要度も分かってない奴が適当な回答して悦に浸るのは間違ってる。

>>365ではコピペしようと試みてるのに、destination使ってコピしてる>>368のコードは違うと言いきってるし。
どういうこっちゃ。

だいたいから、なんで .value を省略する馬鹿が多いんだ?
プロパティ省略なんて百害あって一利無しだ。
可読性もひったくれもあったもんじゃない。

384 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:11:04 ]
なんでマジになってるの?

385 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:11:07 ]
まあ今の時点でValueやらTextやら書いてもどうせ意味分からんだろうし
省略してることで壁に当たったとき、もう一度勉強しなおせばいいさ



386 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:11:36 ]
プロパティの呼び方も分かってない奴がプログラマーとか笑わせるなよw
マジで。

387 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:12:03 ]
> 百害あって一利無しだ。
コードが短くなるという利があるでしょ

388 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:12:21 ]
皮肉や嫌みが通じないのは、目の前のコードを100%文法通りに解釈する訓練を受けた弊害だな

389 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:13:28 ]
プロパティは知らなくても俺には関係ないが、それなら copyメソッドを勧めるべきだろ。

390 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:14:10 ]
>>387
横から突っ込むけど
それって利点なのか?w
必要なことを表現してない短縮って百害あ(ry・・・以下ループ

391 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:15:53 ]
古いバージョンのVBAだとRange( )よりRange( ).Valueのがかなり高速だったんだけど、
今のバージョンでは差が出ないんだよな。
当のMSもデフォルトプロパティの省略は推奨してないんだけど、言うことを聞かない
日曜プログラマが多いから仕様を変更したんかな。

392 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:19:44 ]
一般論として、変に省略すると、うっかり複数のセルが選択された状態でマクロを呼んだら
エラーになったり関係ない周囲のセルを書き換えたりすることがあるから
もうちょっと丁寧にコーディングした方がいいと思う。

393 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 00:19:50 ]
右辺を省略すると誤作動起こす可能性があるぞ。

394 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 16:22:07 ]
xp 2003のADODB.Streamに関する質問です
shift-jisで読み込んだファイルをutf-8に変換して
バイナリモードにして.Wirteした後にさらにバイナリデータを追記したいのですが
.Write bytData
.Write chr(10)
とすると'実行時エラー3001'になってしまいます。
どうかご教示よろしくお願いいたします。

With SecondObj
.Position = 0
.Type = adTypeBinary
.Position = 3 '先頭から削除する文字数
bytData = .read
.Write bytData
.Write 追加したい文字列
.SaveToFile saveFile, adSaveCreateOverWrite
.Close
End With

395 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 16:42:29 ]
Write バイト配列



396 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 17:40:17 ]
すいません。
シートにプリントスクリーンで貼り付けた写真や図やらがあるのですが、
定期的に全て削除したいのですが、
VBAでやりたいと思います。
調べたのですが分かりませんでした。
識者の方、ご教授お願い致します。

なおexcel=2000
OS=2000

でう。宜しくお願い致します。


397 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 18:51:22 ]
どう調べて、どこが分からなかったのか?
まずはそれをそっとささやいて欲しい

398 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 19:20:12 ]
>>397
すいませんでした。
ネットと手持ちの本で調べたのですがのっていません。
自分でやったら、

数式
データ
書式設定

これらは削除できるのですが、
プリントスクリーンの画像だけは残ってしまいます。

399 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 21:59:21 ]
>>398
なんかシートごと消した方がいいような感じの発言ですね
でも一応
For Each shp In ActiveSheet.Shapes
shp.Delete
Next shp


でアクティブなシートのシェイプが全部消えるよ

400 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:18:54 ]
>>399
有難うございます!!!
今やったら出来ました。

大感激です!!!!!

本当に有難うございました!

401 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:44:09 ]
>シートにプリントスクリーンで貼り付けた写真や図やらがあるのですが、
>定期的に全て削除したいのですが、

興味本位だけどどういう使い方してんの?

402 名前:デフォルトの名無しさん [2009/03/23(月) 23:54:03 ]
すみません初歩的な質問なんですが
オートフィルタで抽出した可視セルの値を配列変数に代入したのですが
うまくいきません。

Sub test()

Dim atai() As Variant
Dim gyo() As intger

Sheets(1).Range("A1").AutoFilter 3, ">0"

ReDim atai(0), gyo(0)
atai(0) = Sheets(1).Range("A2", Range("A2").End(xlDown)).SpecialCells(xlCellTypeVisible).Value
gyo(0) = Sheets(1).Range("A2", Range("A2").End(xlDown)).SpecialCells(xlCellTypeVisible).Count

Sheets(2).Range("A2", "A" & gyo(0)).Value = atai(0)

End Sub

上記のコードではうまく配列に値を代入できません。
どなたかご教授願います。


403 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:32:50 ]
>>402
おかしな部分が多すぎて、どこから教えたらいいのか…
自分で考えながら作るのもいいけど、まずはマクロの記録やってみ?
無駄がないように手順を良く考えてから、余計なキーを押さないよう、
余計な場所をクリックしないよう、慎重に操作しながら記録してみて、
それでもできあがったマクロは無駄が多いから、
それを自分で修正していくのがいいと思う。

404 名前:デフォルトの名無しさん [2009/03/24(火) 00:50:11 ]
↑自動記録でどうやって配列変数に値を代入するの?


405 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 01:22:04 ]
>>401
株です。
ライトカッターって言うソフトで下部のチャートを切り取って、
それで明日の作戦を立てるのですが、
一週間もすると莫大なページを消費してなにが何だかになるので、
今回のVBAが必要になりました。



406 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 01:25:55 ]
オートフィルタに1件もひっかからなかった場合を考慮してないから注意な

Sub test()
  Dim atai() As Variant
  Dim gyo As Long
  Dim i As Long
  Dim R As Range
  Sheets(1).Activate
  Range("A1").AutoFilter Field:=1, Criteria1:=">0"
  Set R = Range("A2", Range("A" & Rows().Count).End(xlUp))
  gyo = R.SpecialCells(xlCellTypeVisible).Count
  ReDim atai(gyo - 1)
  i = 0
  For Each C In R.SpecialCells(xlCellTypeVisible)
    atai(i) = C.Value
    i = i + 1
  Next
  R.Copy Destination:=Sheets(2).Range("A1")
End Sub

407 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 01:31:26 ]
>>404
少なくとも最初のエラーはマクロの記録で解決するはず
自分で直せる部分は自力でやらせる方針なんで

408 名前:デフォルトの名無しさん [2009/03/24(火) 02:08:30 ]
質問です。
エクセル2003を使ってグラフの散布図作成するマクロを作っているのですが
データの範囲に変数使用する方法が分かりません。

マクロの記録で

Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("J4")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R1C3:R300C3"
ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R300C1"
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"

これを作成したあと、グラフの読み込む範囲が今300なのに対して
ここの300を変数に格納した数値を利用して変化させたいのです。

ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R1C3:R300C3"
ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R300C1"

ここにどのように変数を絡めたらいいのでしょうか。
変数には、行の一番最後を記録しています。
宜しくお願いします。

409 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 02:16:47 ]
>>408
gyou = 300
ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R1C3:R" & gyou & "C3"
ActiveChart.SeriesCollection(1).Values = "=Sheet1!R1C1:R" & gyou & "C1"
とか

410 名前:408 [2009/03/24(火) 02:24:39 ]
>>409
ありがとうございます。
その&の前後の半角スペースが必須なのですね…。
そのやり方を試していたんですが、やっと解決しました。


本当に助かりました!!!

411 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 02:31:21 ]
スペースの有無で&記号の意味が変わるのってVBの最大の欠点だよな。
誰でも一度ははまったことあるはず。

412 名前:デフォルトの名無しさん [2009/03/24(火) 07:47:15 ]
c言語より後にできたくせにc言語より駄目な言語ばっかりで凹むよね

413 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:25:05 ]
VBSのRegExpをユーザー定義関数としてADDIN化するとか、
Excelの機能自体を拡張出来るスクリプトとしては優秀だな。
ワークシート関数で、リアルタイムで正規表現使えるのは便利だYo!

使ってる人多いから、ADDIN、ADDONもネットで簡単に拾えるし楽ちん。


414 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 21:39:13 ]
質問です。

forをつかってstr(i)に繰り返しデータを入れるようにして、
複数のボタンのキャプションを設定したいと考えてます。

bt1、bt2、bt3…と一部の数字だけ違うのですが、
上手くループで処理する方法はありますでしょうか。

415 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 21:50:13 ]
>>414
Controls



416 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:15:32 ]
ありがとうございます!

後、追加で知りたいんですが、
空のセルをstring型に取り込むと、空のままだと思うんですが、
それをcase文で判定するには、nullや””じゃうまくいきません。

セルが空の時は何かまた違う値が入るんでしょか?

417 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:58:00 ]
セルの初期値はEmpty(定数:vbEmpty)だけど、Emptyなら「Case ""」にマッチするはずだし
String型変数にEmptyを代入するとNullStringに変換されるので、尚更「Case ""」で問題ない。
因みにNullString(定数:vbNullString)は""と同義ね。

「Case ""」にマッチしないなら、セルが空ではない可能性が高いと思う。
Debug.Print Len(変数)
若しくは
Debug.Print Len(セル)
で、0になるか確認してみそ。0じゃなかったら空セルじゃないってこった。

418 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 23:38:31 ]
>>417
ありがとうございます。
一応、msgboxで確認してました。

今よくよく考えたら、""ではなく、" "にしちゃってたかも知れないです^^;
もうアドバイスを踏まえ、もう一度試してみます!

419 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 23:57:58 ]
ちょっと色々やってみたんですが、controlsを使うものがうまくいきません。。。

Controls("CommandButton" & "i").Caption = "test"
というのを、ソースに直接書いても動かないんでしょうか?

Me. Controls("CommandButton" & "i").Caption = "test"
にしても動きません。

ネットで探してみても、Moduleに書け的な事もありますが、

Public Sub chg(ByVal i As Integer)
End Sub

の間に書いて、callしても動きません。
どこがいけないでしょうか?

420 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 00:08:18 ]
変数「 i 」が「 1 」だとして
Controls("CommandButton" & "i")
だと、ボタン名は
CommandButtoni だぞ。
CommandButton1 なら
Controls("CommandButton" & "i") ではなく
Controls("CommandButton" & i) だ。

こういうのもMsgBoxやDebug.Printで
MsgBox "CommandButton" & "i"
などを確認すればすぐに解ることなので、そういう問題起きたら
動かねーって騒ぐ前に初歩的な確認を行う癖を付けようぜ。

421 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:42:12 ]
すいません。
書き間違えました。
ソースはしっかりiのみで、””で囲んではないです;;

422 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:54:11 ]
Me. Controls
  ↑このスペースはNGだ。

これも書き間違いなら
Me.CommandButton1.Caption = "test"
が動くか試せ。

423 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:59:19 ]
ソースはコピペしろ
書き間違いがなくなるし早いだろ

424 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 09:28:58 ]
すいません。セルを選択して、選択したところから左側のセルに、
「時刻」「日付」をそれぞれセルに書き込むコードを書いたのです。
該当部分のコードは


なのですが、そうしたら、時刻しか現れず、日付が出ません。
あれこれやって見て分かったのですが、
時刻と日付の順序を反対にすると

ActiveCell.Offset(0, -13).Range("A1").Select
Selection.Value = Date
ActiveCell.Offset(0, -14).Range("A1").Select
Selection.Value = Time

こうすると、日付は出るものの、今度は時刻が現れません。
色々試行錯誤をしたのですが、なぜか分からず困っています。
識者の方、何卒ご教授お願い致します。

なお、
excel:2000
OS;win2000です。
宜しくお願い致します。

425 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 09:33:11 ]
>>424
セルの書式



426 名前:424 mailto:sage [2009/03/26(木) 09:33:52 ]
>>424です。コードが一部抜けてました。>>424は破棄し、
丸々訂正させてください。丸々1から書き直すと下記になります。

すいません。セルを選択して、選択したところから左側のセルに、
「時刻」「日付」をそれぞれセルに書き込むコードを書いたのです。
該当部分のコードは
ActiveCell.Offset(0, -14).Range("A1").Select
Selection.Value = Time
ActiveCell.Offset(0, -13).Range("A1").Select
Selection.Value = Date

なのですが、そうしたら、時刻しか現れず、日付が出ません。
あれこれやって見て分かったのですが、
コードの時刻と日付の順序を反対にすると

ActiveCell.Offset(0, -13).Range("A1").Select
Selection.Value = Date
ActiveCell.Offset(0, -14).Range("A1").Select
Selection.Value = Time

こうすると、日付は出るものの、今度は時刻が現れません。
色々試行錯誤をしたのですが、なぜか分からず困っています。
識者の方、何卒ご教授お願い致します。

なお、
excel:2000
OS;win2000です。
宜しくお願い致します。


427 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 09:45:43 ]
あのさ、そのコードだと日付と時刻のセルの間が12〜13列空くってことは解ってるか?
間違っても日付と時刻が隣同士にはならないぞ。

とりあえずエスパーすると
ActiveCell.Offset(0, -14).Range("A1").Value = Time
ActiveCell.Offset(0, -13).Range("A1").Value = Date
で良いんじゃないかと思うのだが。

428 名前:424 mailto:sage [2009/03/26(木) 09:58:12 ]
>>427
有難うございます!!!あっけなく出来ました。
感謝です。
しかし、
>そのコードだと日付と時刻のセルの間が12〜13列空くってことは解ってるか?
これは分かってますが、
>間違っても日付と時刻が隣同士にはならないぞ。
え?これがなぜだかサッパリ分かりません。
少なくとも隣り合うと思うのですが。
>>426でも
(0,-14)(0,-13)
と位置を指定したのですから、-14の次の数字は-13ですから、
少なくとも隣り合うと思っていたのですが。。。
一応本は読みました。

私のコードのどこがいけないのか、
もう少しご指摘願えないでしょうか。

429 名前:424 mailto:sage [2009/03/26(木) 09:59:37 ]
>>425
有難うございます。しかしそれではなかったです。

430 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 10:00:21 ]
offsetで - の値を使うときは用心すべし。
どうしても使うならば、

if activecell.columns < 13 then
を挟むとかしてエラー回避しないと、何ともお粗末になってしまうよ。

431 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 10:04:17 ]
if activecell.columns < 13 then

if activecell.column < 13 then   に訂正。

>>429
ActiveCell.Offset(0, -13).Range("A1").Select
Selection.Value = Date
ActiveCell.Offset(0, -14).Range("A1").Select
Selection.Value = Time

activecell.column が100で開始したとき、
offset(0,-13) で、87 を "select" してるでしょ。
んで、次に offset(0,-14) を "select” してるから、73に書かれる。
select したら activecellの場所変わるでそ。

432 名前:424 mailto:sage [2009/03/26(木) 10:14:10 ]
>>430
>>431
431さんご親切に有難うございます。

>select したら activecellの場所変わるでそ。
そういうことか!!!と思いました。
ご指摘頂きやっと意味が分かりました。
>>431のご説明は、間違えたコードの下にメモとしてコーピーさせて頂きます。
勉強不足を感じました。
本当に有難うございました。


433 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 12:39:51 ]
Controls("CommandButton" & i)でもやはり動きません…
subかfunctionがないと言われます。

またMeなどつけてもオブジェクトがおかしいと言われます。

何か宣言しないといけないとかありますか?

434 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 17:50:32 ]
>>433
Controlsはフォーム上のコンポーネントにしか使えない。
ワークシートに貼り付けたボタンの場合はControlsじゃなくて
Worksheets("Sheet1").OLEObjects("CommandButton" & i).Object.Caption = "test"

435 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:40:44 ]
>>433
>>414ではコマンドボタンのオブジェクト名が bt1、bt2…だけど、実際のオブジェクト名は?



436 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:47:13 ]
エラーメッセージが「Sub または Function が定義されていません。」なら
>>434で正解の可能性が高い。
質問するときはエラーメッセージを1文字も間違えずにそのまま書くのが基本だよ。
たとえ意味が通じても、勝手に略しちゃだめ。悪い例→「subかfunctionがない」
それにメッセージをそのまま検索すればたいてい解決方法が見つかる。

437 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 00:11:47 ]
質問です。

ブックオープン時に、publicのstringに
セルを読み込んでいます。

最初のうちはうまい事その中身を使えるんですが、
ずっとブックを開いたままにしていると、
気が付いたら変数の中身が変わってるのか、
消えるのか分かりませんが、最初の状態ではなくなってしまいます。

変数に値を入れたものを
ずっと保持しておく事はできないんでしょうか?

438 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 00:18:40 ]
>>434>>436
ありがとうございます!
ご教授頂いた記述でうまくいきました。

>>435
携帯から書き込んでいて面倒だったので省きましたが、実際は普通にCommandButton1です。



439 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 02:34:06 ]
>>437
Option Explicitは書いてある?

440 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 07:44:28 ]
>>439
書いてないです。
それを書けば延々保持され続けるんでしょうか?

441 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 09:00:01 ]
モジュールレベル変数の値は
・任意に代入、初期化
・モジュール内編集
しない限りは保持される。

誤って気付かない内に初期化するコードを書いてる可能性が無いのに不意に初期化されてるなら、
「モジュール内編集」に因るものの可能性が高い。

「モジュール内編集」とは、モジュールレベルの宣言部(Public xxx As Stringとか書いてるところ)
を書き替えるとか、新しいプロシージャを作成・削除するとか(既存のプロシージャ内の編集は非該当)
デザインモードを使用するとかね。

「モジュール内編集」を行ったらモジュールレベル変数が初期化されるのは当然のことでそれはどうしようも無い。

442 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 12:41:21 ]
まぁ、それ以外にも初期化されることがあるんだけどな

443 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 13:16:52 ]
例えば?

444 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 13:52:32 ]
[VBA] Public 宣言された変数の有効期間
support.microsoft.com/kb/408871/ja

445 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 13:56:29 ]
あー、そのページで、「モジュール内編集」以外が何なのか明記しておいた方がいいか。
・プロジェクトの構造の変更
・コンパイルエラーの発生
・コントロールを削除して [元に戻す] を実行する

ちなみに、そのほかにも初期化されることが経験上あった。

いずれにせよ「何もしてないつもりでも、変数が初期化されることはありうる」という前提で
プログラミングすべきで、意図しない初期化が困る場合は、シートに値を保存するなどを
しておく必要がある。



446 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 13:58:27 ]
あー、さらに追加。
「そのほかにも」の内容は、「なにもしてないつもり」だったので、何なのかは具体的にはわからない。

447 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 15:29:13 ]
へー

448 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 22:23:21 ]
>>437
static

449 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:01:14 ]
staticでも無力ですがな

450 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:38:26 ]
モジュールレベルの変数が初期化されるとき
つまりモジュールが初期化されるときは
モジュールレベルのプロシージャも初期化され
プロシージャレベルで保持されるStatic変数も
プロシージャの初期化に伴い当然初期化される

451 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 00:23:02 ]
ななめ読みしてレスで悪いんだけど、非表示シートに書き込んでおけば?

452 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 02:06:03 ]
すいません。
もし選択したセルがA1であれば、B1の値を7にする。
というのは何とかできました。

If ActiveCell = Range("A1") Then
Range("B1").Value = 7
End If

これと似たように
もし選択したセルがA1からA10のいずれかであれば、B1の値を7にする。
というのが出来ず困っています。一応下記のようにしましたが

If ActiveCell = Range("A1:A10") Then
Range("B1").Value = 7
End If

どうしても出来ません。

もし出来なければ、
「選択したセルがA列のいずれかであればB1の値を7にする。」

ということでも良いのですが。

識者の方お力をかしていただけないでしょうか。
宜しくお願い致します。
なおexcel:ver2000
OS:win2000になります。

宜しくお願い致します。

453 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 02:34:27 ]
If ActiveCell.Column = "1" Then

454 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 02:45:24 ]
>>453
有難うございます!
今日はもう遅いので、明日試させていただき、
追って報告します。


455 名前:452 mailto:sage [2009/03/28(土) 02:53:18 ]
すいません。列のいずれか、というのを教えていただき本当に助かります。
感謝してます。

しかし出来れば、

「もし選択したセルがA1からA10のいずれかであれば、B1の値を7にする。」
というケースも分かれば嬉しいなと思います。、
どなたか教えていただければ助かります。




456 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 03:16:16 ]
If Not Intersect(ActiveCell, Range("A1:A10")) Is Nothing Then
 Range("B7").Value = 7
End If

457 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 13:00:11 ]
ここは質問スレだがおまえの宿題手伝いスレじゃねーぞ
んなクソ簡単な命令くらい自分で調べて作れアホ






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

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

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