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


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

●EXCEL・VBA質問スレ Part2●



1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ]
・まじめにExcelの機能を追及してみようと思う奇特なひと
・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと
・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと
・とにかく漏れにこんな仕事まわすなと怒っているひと
そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです

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

213 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 00:38:54 ]
>>211
煽ったら作って貰えると思って必死だな。
今宵は枕が涙で濡れてるんぢゃねぇの?

214 名前:デフォルトの名無しさん [2007/06/22(金) 00:48:37 ]
バイナリーファイル(テキスト形式でないファイル)を開いて、
nバイト目の数字を読み込むっていうプログラムを組みたいのですが、
VBAでできますか?


215 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 00:56:55 ]
よゆう

216 名前:214 [2007/06/22(金) 11:34:20 ]
ちょっとしたヒントだけでも教えてつかわさい。


217 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 12:47:31 ]
open filename for random as #filenumber len=1
get #filenumber, n, buf

218 名前:214 [2007/06/22(金) 15:54:48 ]
えっ、まじですか。
N88BASICとまったく同じぢゃ・・・


219 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 15:56:42 ]
そりゃぁ、MicrosoftBasicの派生だからねぇ。どっちも。

220 名前:214 [2007/06/22(金) 18:54:47 ]
わしもスレに貢献しよう
arcsin(sin(t/T*2π))
って
t/T*2π
と同じでしょうw

つりか・・・まじか?


221 名前:デフォルトの名無しさん [2007/06/22(金) 23:32:39 ]
教えて頂きたいです。△にぶつかった後に円を描くようにしたいのですが・・・
難しくて。ご教授下さい。
Sub seven() ' 弾けるボール
ActiveCell.Offset(5, 0).Value = "手" ActiveCell.Offset(5, 1).Value = "○"
ActiveCell.Offset(5, 7).Value = "▲" For i = 1 To 6 For J = 1 To 500
ActiveCell.Offset(5, i).Value = "○" ActiveCell.Offset(5, i).Value = ""
ActiveCell.Offset(5, i + 1).Value = "" ActiveCell.Offset(5, i + 1).Value = "○"
Next J ActiveCell.Offset(0, i + 1).Value = ""
Next i ActiveCell.Offset(5, 7).Select.Value = "☆"
For i = 1 To 3 A = ActiveCell ActiveCell = ""
ActiveCell.Offset(-1, 1).Activate For J = 1 To 500
ActiveCell = A Next J Next i For i = 1 To 3
A = ActiveCell ActiveCell = "" ActiveCell.Offset(1, 1).Activate
For J = 1 To 500 ActiveCell = A Next J Next i
For i = 1 To 3 ActiveCell = "" ActiveCell.Offset(1, -1).Activate
For J = 1 To 500 ActiveCell = A Next J Next i
For i = 1 To 3 A = ActiveCell ActiveCell = ""
ActiveCell.Offset(-1, 1).Activate For J = 1 To 1000
ActiveCell = A Next J Next i End Sub




222 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 23:51:21 ]
>>220
前者は周期関数になる。元レスは、それを使って三角波にできると悦に入っていたらしい。

223 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 08:35:42 ]
>>221
スレ違い。>>16

224 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 13:52:35 ]
>>223
スレ違いで拒否るのもいいが、いい加減過疎ってないか?このスレ
あと質問に答えても質問者もほったらかし多いし・・・
俺はわからんから答えんだけだが

225 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 15:11:42 ]
> いい加減過疎ってないか?このスレ
この板はこんなものだよ
一応ここは過疎板だから

当然、この板にもここより賑わってるスレはあるが
このスレでも平均以上どころか勢い上位1割に入るほど
もっと静かでもいいくらいだ

226 名前:デフォルトの名無しさん [2007/06/24(日) 08:44:32 ]
あるRangeの一番左上のセルの情報を得たいのですが、
どうしたらよいでしょうか?
Offsetだと、Range全体が取得されてしまいます。
左上のセルのRangeだけを得たいのですが・・・

ActiveSheet.Range("資産表[資産]").Offset(0, 0).Select

227 名前:デフォルトの名無しさん [2007/06/24(日) 08:47:10 ]
>>226
自己解決しました。

ActiveSheet.Range("資産表[資産]").Cells(1, 1).Select

Cellsでした。Rangeにないかと思ってました。

228 名前:デフォルトの名無しさん [2007/06/24(日) 09:49:10 ]
すみません、質問です。

商品NO 値段 日付 〜
100 20 5/1
101 21 5/1

といったデータが600まである表があります。
修正や訂正をするため、月一で直さなければいけないんですが
一回別シートに抽出して,そこで変更をし、元あった行に上書きをする
そのように作れと上司にいわれてしまいました。

抽出し、別シートに移すことは出来たのですが、それを元の所に
上書きするのには、どうしたらいいのでしょうか?
切実に困っています。教えていただけたら嬉しいです。

229 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 10:20:48 ]
抽出した行と元の行を関連づければいいでしょ
方法はいくらでもあるけど
一番簡単なのは別のシートの同じ行に抽出するやり方かな

230 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 12:15:43 ]
>>228
商品Noをkeyにして.findメソッドで検索して
コピーするVBAをつくる

231 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 12:16:46 ]
同じ行への抽出だとわざわざ抽出する意味がないと言われます
関連付けっていうのはどのようにやるのですか?



232 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 12:37:17 ]
すみません、書き込みしている最中に書き込んで頂いてたみたいです。
わかりました、まだKeyとかFindメソッドの使い方が上手ではないのですが
月曜日にがんばってみます。

もしまた解らなかったら書き込みしにきます。
そのときもよろしくお願いします。
ありがとうございました。

233 名前: [2007/06/25(月) 23:05:08 ]
マクロ使って初心者でも簡単に作れるプログラムって何かあります?
課題でなんでもいいから作ってこいって言われたんですけど何を作ればいいのやら。
参考書買うしかないんすかね〜お勧めのWEBサイトありますか?

234 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:07:54 ]
MsgBox "Hello World!"

235 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 00:59:48 ]
>>1の2番目です!
しつもん!
vlookupのプロパティ?に変数を使いたいんですがうまくいきません
どうすればいいでしょうか?

↓こんなふうにしたい

for count=1 to 10
   Cells(count,4).select
   Activecell.Value = "=Vlookup("count"1,B:C,2,False)
next count

A列とB列を比較して、同じのがあったらC列をD列にコピー、みたいな?
BC列も本当はRange("B65536").End(xlUp).Selectで取得した値を使いたいです。

というかそれ以前にRangeで変数を使う方法すらわからない・・・

236 名前:235 mailto:sage [2007/06/26(火) 01:07:09 ]
書きまちがいを発見

× Activecell.Value = "=Vlookup("count"1,B:C,2,False)
△ Activecell.Value = "=Vlookup(1"count",B:C,2,False)"
○ ?

ところで="〜"で書くのとApplication.WorksheetFunction .VLookup使うのって何か違うのでしょうか?


237 名前:デフォルトの名無しさん [2007/06/26(火) 01:08:48 ]
ExcelVBAで、サブルーチンのネストはできますか?

238 名前:デフォルトの名無しさん [2007/06/26(火) 01:19:37 ]
>>235
悪い、したいことが分からない。
>A列とB列を比較して、同じのがあったらC列をD列にコピー、みたいな?
これってVLOOKUPか?

ちなみに
ActiveCell.Value="=SUM(B2:B4)"
ActiveCell.Value=Application.WorkSheetFunction.Sum(Range("B2"),Range("B4"))
との違いは、最初の方は、マクロ実行後にB2からB4のセルの値が変われば、ActiveCell
の値も変わる。でも、下の方は変わらない。
それだけじゃないけどな。

239 名前:235 mailto:sage [2007/06/26(火) 01:33:37 ]
>>238
説明悪くてすまん

まずA1のセルを選択
B列のどこかにA1と同じデータがあったら(B10とする)C10をD1にコピー
これをA10まで繰り返し

vlookupじゃないの?


当初↓みたいなことをやってたのですが、データが各1万行とかになったら速度が恐ろしいことになりまして。
どうにかこれを高速化したいのです。

for count1=1 to Range("A65536").End(xlUp).Select
  for count2=1 to Range("B65536").End(xlUp).Select
    if Cells(count1,1).value = Cells(count2,2),value then
      Cells(count1,4).value = Cells(count2,3).value
    end if
  next count2
next count1

240 名前:デフォルトの名無しさん [2007/06/26(火) 01:47:48 ]
>>239
ああ、確かにVLOOKUPだな。
この感じだと、セルD4に 「=VLOOKUP(A1,B:C,2)」って入るよな。
それをセルD10まで下にコピーするのじゃいけないの?



241 名前:235 mailto:sage [2007/06/26(火) 01:58:26 ]
>>240
各1万行くらいで行数が不定なのです
まとめて出来る(で、forより早い)方法があればvlookupでなくてもなんでもいいのですが




242 名前:デフォルトの名無しさん [2007/06/26(火) 02:17:26 ]
>>241
もう頭が働かないんで…
とりあえず235で質問してたRangeを変数に代入する方法
 Dim targetRange As Range 
 Set targetRange = Range("A65536").End(Xlup)

これでtargetRange.Rowで最終行が何行目か分かる。

ちなみにforでも一万行くらいならあまり時間かからないような気がする。
forのネストにする意味が分からない。一致したらExit For でFor文を
抜ければいいのに。



243 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 03:15:16 ]
>データが各1万行とかになったら速度が恐ろしいことになりまして

実行中の画面描画をOFFにしてないんじゃない?
そこ変えるだけで解決することもあるよ

244 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 03:20:47 ]
Application.ScreenUpdating = False
処理の終了段階でTrueに戻して下さい。

Application.EnableEvents = False
処理の終了段階でTrueに戻して下さい。

Application.Calculation = xlCalculationManual
処理の終了段階でxlCalculationAutomaticに戻して下さい。

マクロ動作中にEscキーで止められるのを抑制する。
マクロ動作中に一切のキーやマウス操作を制限する。
Application.Interactive = False
処理の終了段階でTrueに戻して下さい。

但し、この状態で何らかの理由でマクロが停止してしまうと、Excel自体は何も操作できない状態になってしまい、タスクマネージャで強制終了させなければならなくなります。この記述だけは確実に動作検証が終わってから設定して下さい。

マクロ動作中はマウスカーソルを「砂時計」にする。
Application.Cursor = xlWait
処理の終了段階でxlDefaultに戻して下さい。

www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_090_040.html


245 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 04:00:51 ]
>>235
Range("D1").Resize(Cells(Rows.Count, "A").End(xlUp).Row).Formula = _
"=VLOOKUP(A1,B$1:C$" & Cells(Rows.Count, "C").End(xlUp).Row & ",2,FALSE)"

>>244
>何も操作できない状態になってしまい、タスクマネージャで強制終了させなければならなくなります。

イミディエイトウィンドに
Application.ScreenUpdating = True
で、エンターキー

246 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:07:51 ]
 A     B    C       D
東京  東京  東京  =LOOKUP(A1,B:B,C:C)
     大阪  大阪
     愛知  名古屋
     福岡  福岡
     北海道 札幌


とするとD1が名古屋になるんだけど気のせい?

247 名前:235 mailto:sage [2007/06/27(水) 01:06:07 ]
>>242,243,244,245さん、ありがとうございます。

>>242
逆でして、
for i=1 to Range("A65536").End(Xlup)
Range("A"i).select
next i
みたいなことがしたかったのです。

>>243,244,245
本日ぐぐりまくってとりあえずそこらへんの設定をしました。

やりたいことを綴ってたらえらい長くなってしまったので表にしました(とりあえずodsとxml)
見ていただければ幸いです
ttp://bebe.run.buttobi.net/up/src/be_1262.zip

248 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:10:52 ]
2003personalだとエラーが出て開けない

249 名前:235 mailto:sage [2007/06/27(水) 01:21:05 ]
うゆー

ってか、今更xlsを発見した。すまねぇ
ttp://bebe.run.buttobi.net/up/src/be_1263.zip

250 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:27:13 ]
なんか昔、これの横バージョンを総合相談所のほうでコード書いた気がする…

251 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:52:19 ]
横バージョンじゃなくて、似たような表の作成だった。
相談所55の部品表のをいじればなんとかなるんじゃないかな。
実行速度もシートをメモリに読み込んですれば大丈夫だろう。
もう寝る。



252 名前:245 mailto:sage [2007/06/27(水) 17:46:50 ]
'Microsoft Scripting Runtime を参照設定
'結果はG,H,I列の1行目以下に出力

'結果出力用配列 出力行数を上回る行数を確保。下回るとエラー
Dim ans(5000, 2) As String

Dim d As New Scripting.Dictionary
Dim v() As Variant
Dim buf As Variant
Dim vv As Variant
Dim i As Long
Dim n As Long

v = Range("D1", Cells(Rows.Count, "E").End(xlUp)).Value

For i = 1 To UBound(v)
  If d.Exists(v(i, 1)) Then
    d(v(i, 1)) = d(v(i, 1)) & vbTab & v(i, 2)
  Else
    d.Add v(i, 1), v(i, 2)
  End If
Next i

v = Range("A1", Cells(Rows.Count, "B").End(xlUp)).Value

253 名前:245 mailto:sage [2007/06/27(水) 19:00:43 ]
For i = 1 To UBound(v)
  If d.Exists(v(i, 1)) Then
    buf = Split(d(v(i, 1)), vbTab)

    For Each vv In buf
      ans(n, 0) = v(i, 1)
      ans(n, 1) = v(i, 2)
      ans(n, 2) = vv
      n = n + 1
    Next vv
  Else
    ans(n, 0) = v(i, 1)
    ans(n, 1) = v(i, 2)
    n = n + 1
  End If
Next i

Set d = Nothing
Range("G1").Resize(n, 3).Value = ans

254 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 21:42:09 ]
をいをいw

255 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 23:38:13 ]
>>254
どうした?

256 名前:デフォルトの名無しさん [2007/06/28(木) 09:32:06 ]
>>252
>>245関連ではないのだが、

> 'Microsoft Scripting Runtime を参照設定
> Dim d As New Scripting.Dictionary

これってなに?VBAから、WSHのオブジェクトを呼び出しているわけ?


257 名前:デフォルトの名無しさん [2007/06/28(木) 17:31:08 ]
すいません。質問です。
シート1のあるA1に「A」、A2に「B」、B1に「1」、B2に「2」が入っています。
シート2にはA1に「A」、A2に「3」、B1に「B」、B2に「4」が入っています。
シート1のA1の「A」を検索した上でその下のセルにある「1」をシート2の「A」の横にあるセルに入力し、且つそのセルにあった数値(ここでは3)を右にシフトしたいのです。
VBではどうすればいいですか?

258 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 19:38:54 ]
Shift:=xlToRight

259 名前:235 mailto:sage [2007/06/29(金) 00:17:52 ]
相談所55が見つからなかったので自力で作ったよ!

よく考えたら別に一枚のシートじゃなくていいじゃん、ということに遅まきながら気付いたので

for i,j=1 to 各行数
  If Cells(i,1).value = Cells(j,4).value then
    k=k+1
    Sheet("Sheet2").Cells(k,1).value = Cells(i,1).value
  Next j
  〜(マッチしなかったときの処理とか)〜
Next i

的な流れで完成したお!
遅いお!

>>252
何これ!チョー早い!
意味が全然分からないけど今から修行する!さんくす!


ところで=minute(now())とかsecond(now())とか並べてるとyear(now())だけ変になるんだけど何故?


260 名前:デフォルトの名無しさん [2007/06/29(金) 00:24:35 ]
値のコピー貼付をワークブック間で行いたいのですが、
' @コピー元
Workbook("").Sheets("").Activate
Range("").Copy
' Aコピー先
Workbooks("").Sheets("").Activate
Range("").Select
Selection.Pastespecial Paste:=xlValues

ファイルをまたぎ、かつ値貼付の場合このような段階を踏まないとエラーになってしまいます。
同シート内での値コピーに使える Range("").Copy Range("").Pastespecial
またはRange("")=Range("") のような簡潔な記入法は無いものでしょうか?

261 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 00:42:07 ]
ですてぃねーしょん




262 名前:デフォルトの名無しさん [2007/06/29(金) 01:05:23 ]
すみませんが、ひとつ教えてください。
階乗を計算する関数を作成したくて、
以下のようなプログラムを書いたのですが、
戻り値が0です。
なぜでしょうか?
(ちなみに、xxをkfactにすると、正常に動くようです)
ぜひ、ご回答お願いいたします。

Public Function kfact(n As Integer) As Integer

Dim i As Integer
Dim xx As Integer

i = 1
xx = 1
Do While i < n
xx = xx * i
i = i + 1
Loop

End Function


263 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 01:26:15 ]
>>262

Public Function kfact(n As Integer) As Integer

Dim i As Integer
Dim xx As Integer

i = 1
xx = 1
Do While i < n
xx = xx * i
i = i + 1
Loop
'↓これ追加(戻り値)
kfact = xx
End Function

ちなみに階乗なら=fact()って関数あるけど
それじゃダメなん?
VBAで使うならApplication.WorksheetFunction.Fact()ね

264 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 16:35:16 ]
>>256
わけ。特に珍しい手法ではない。

Dictionaryやfsoは便利なので結構良く使うと思う

265 名前:デフォルトの名無しさん [2007/06/29(金) 20:11:27 ]
エクセル2003、ウィンXPです。
以下の様なマクロを作成しました。
データの抽出後に、可視セルの値を順に特定セルに入れて、
印刷したいのですが、思った様に動作しません・・・。
どなたか、お知恵を!


Sub 抽出と印刷()

'書類作成用にデータを抽出。
'シート1のBP列がゼロで無いものを抽出。

Sheets("シート1").Columns("BP:BP").AutoFilter Field:=1, Criteria1:=">0", Operator:=xlAnd

'抽出されたリストのBP列の値をシート2のD68に順番に入れて、2枚ずつ印刷する。
‘抽出から除外された行は印刷からも除外したいので、可視セルだけで処理したい。

Dim i As Long
For i = 2 To Worksheets("シート1").Cells(Worksheets("シート1").Rows.Count, 1).End(xlUp).SpecialCells(xlCellTypeVisible).Row
Worksheets("シート2").Range("D68").Value = Worksheets("シート1").Cells(i, 1).SpecialCells(xlCellTypeVisible).Value

'印刷処理をします。
Sheets("シート2").PrintOut copies:=2, Collate:=True, preview:=True

Next i

End Sub


266 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 20:28:14 ]
>>256,264
> これってなに?VBAから、WSHのオブジェクトを呼び出しているわけ?
正確には違う
Microsoft Scripting RuntimeはWSHのインストーラーパッケージに含まれてはいるが
Scripting.DictionaryはWSHのオブジェクトではなく、ActiveXの汎用コンポーネントに含まれるオブジェクト
WSHのオブジェクトじゃないから、WSHから使う場合もWSHのオブジェクトであるWScriptオブジェクトみたいに
いきなり使うことは出来ず、CreateObjectなどで外部参照してやる必要がある

267 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:03:58 ]
ShowしたUserFormってどうやって閉じていますか?

UserForm1.Close

こんなのないよね?

Unload Meってのはいまいち分からない。不便。

268 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:08:07 ]
Unload UserForm1

269 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:24:03 ]
>>268
サンクス

270 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:25:06 ]
>>265
どこが思ったように動作しないのか説明がないけど
抽出したあとCopy使えばいいよ

>>267
UserForm1.Hide

271 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 00:04:38 ]
>>270
Hideは見えなくなるだけ



272 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 00:46:27 ]
>>271
うん、でも>>268の人がもう答えてたから他のを書いた
あと一応はShowとHide、LoadとUnloadが対応になってるかなと思ってるし

273 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 01:35:58 ]
Accessではclose使えるのに
どうしてExcelではだめなのでしょう?

274 名前:262 [2007/06/30(土) 01:50:26 ]
263
ありがとうございます。
ワークシート関数ってオーバーフローするイメージがあるので、あんまり好きじゃないのです。


275 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 00:50:52 ]
>>92
Application.FileSearchは削除されたよ。
以前から挙動不信だったんで、存在そのものを抹消したのだと思われ。

276 名前:デフォルトの名無しさん [2007/07/01(日) 03:23:57 ]
5人で30回じゃんけんをして、出した手をB〜Fに書き込み、勝敗をG〜Kに
書き込むマクロを短めで作りたいのですが、勝敗パターンを作る以外の方法が思いつきません。
よろしくお願いします。


277 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 04:25:41 ]
>>276
>>16
さようなら

278 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 08:47:13 ]
>>275
あー確かに挙動不振だな

279 名前:デフォルトの名無しさん [2007/07/01(日) 09:19:11 ]
置換について質問です。
以下の様にすると、"さんま"という文字列を"魚"に置換できるのですが、
"さんま"、"タイ"、"いわし"のいずれかの場合に"魚"に置換する場合はどうやって指定しますか?

Selection.Replace What:="さんま", Replacement:="魚"

280 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 09:31:10 ]
>>279
with Selection
.Replace What:="さんま", Replacement:="魚"
.Replace What:="タイ", Replacement:="魚"
.Replace What:="いわし", Replacement:="魚"
end with


281 名前:デフォルトの名無しさん [2007/07/01(日) 09:38:53 ]
>280
ありがとうございます!



282 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:13:19 ]
>>276
総合で訊いてる奴だよな?

283 名前:280 mailto:sage [2007/07/01(日) 10:20:13 ]
>>281
ぉぃ! まさか、こんなこと訊いてるんじゃないよなぁ...と思いながら、
答えてみたんだが、解決かよ(-_-#);


284 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:57:24 ]
釣りだろ

285 名前:デフォルトの名無しさん [2007/07/01(日) 11:57:26 ]
シートAに以下のマクロ実行するボタンがあります。
シートBを選択した状態だと問題なく動作するが、
シートAから実行するとエラーがでます。
最終的にシートA以外は不可視にしたいので、
Worksheets("シートB").select
をしたくないです。
何か良い方法有りますか?

Worksheets("シートB").Range(Cells(1, 1), Cells(100, 100)).Sort Key1:=Range("a1"), Key2:=Range("d1"), Header:=xlYes

286 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:11:49 ]
Set ws = Worksheets("シートB")
With ws
.Range(.Cells(1, 1), .Cells(100, 100)).Sort Key1:=.Range("A1"), Key2:=.Range("D1"), Header:=xlYes
End With


287 名前:デフォルトの名無しさん [2007/07/01(日) 15:26:32 ]
>286

有難うございます。
試してみましたところ、シートBが選択された状態では動作しました。
シートAが表示された状態で実行すると、
「アプリケーション定義またはオブジェクト定義のエラーです」となります。

288 名前:デフォルトの名無しさん [2007/07/01(日) 19:25:16 ]
Σ(゚∀゚;) ?

289 名前:デフォルトの名無しさん [2007/07/01(日) 19:45:48 ]
285です。
解決しました。

Worksheets("シートB").Range(Worksheets("シートB").Cells(1, 1), Worksheets("シートB").Cells(100, 100)) _
.Sort Key1:=Worksheets("シートB").Range("a1"), Key2:=Worksheets("シートB").Range("d1"), Header:=xlYes


290 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 20:52:21 ]
>>289
これって>>286と何が違うん?

291 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:42:36 ]
Excel2003なのですが、
VBエディターで編集したマクロをリロードするための
ファンクションキーってありますでしょうか?




292 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:01:44 ]
エクセルの2つのシートを比較するマクロを作っているのですが、
行と列のサイズが大きくなると処理が重くなります。

1000*256ぐらいで処理が重くなります。
これは、仕様なんでしょうか。

For i=0 To 65536  
  For j=0 To 256
    比較
  Next
Next

使われているシートの範囲を読み取るとか
範囲を設定するとかすればいいと思っています。
指摘などありましたらよろしくお願いします。

293 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:19:53 ]
>>292
Dim s As Range
Set s = ActiveCell.SpecialCells(xlLastCell)
MsgBox s.Column & " " & s.Row


294 名前:デフォルトの名無しさん [2007/07/02(月) 20:40:46 ]
arry(あ,い,う,え,お)
を、
ExcelのセルA1〜E1に
一気に貼り付ける方法てないですかね。

For文で順番に
セルA1に「あ」を入れて
セルB1に「い」を入れて…
というのは分かるんですが。
なんかもっとこう効率良いやり方ないかな。

295 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:05:35 ]
>>294
おしい、そこまでいけて何故できないw
Range("A1:E1") = Array("あ","い","う","え","お")

是非感想を。

296 名前:デフォルトの名無しさん [2007/07/02(月) 21:14:58 ]
>>295
で、できたー!!

ありがとう。これでよかったのか…
Pasteにばっか気をとられてたわ。

297 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:16:07 ]
VBAのコードを含んだブックを余所にあげたりするとき、デジタル署名とか
どうしてますか?

律儀にベリサインから買ったりしてるんでしょうか?

298 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 06:33:52 ]
SelfCert
外に出すときは、署名壊れたとき用に対応策(向こうで再署名)を書いておく
# ソースは見られるが管理者だけなら問題なかろう
2000ならこれでOK

それ以降なら我慢して使ってもらうしか。
一応、毎回署名を確認してもらう事に…

既に署名を持っているならともかく、予算的にExcelの為に申請なんて出せないし。

299 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:15:58 ]
売る場合はともかく、あげる場合は向こうで勝手に対応してもらう

300 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:31:57 ]
Set objIE = CreateObject("InternetExplorer.application")
で、IEを起動しています。
なんらかの操作で、IEのウインドウが最小化された場合に備えて、それを「元のサイズに戻す」の
処理を行いたいのです。
検索してみたところ、VBでは、SW_SHOWNA の利用で良いみたいですが、
同様の処理をVBAで行いたいのです。
ojbIEに対して処理を加える方法は無いでしょうか?
他に考えたのは、API32を参照しobjIEとは関係なく処理を行うですが、そうした方が良いのでしょうか?
よろしく御願いします。


301 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:10:35 ]
>>300
>>16



302 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:41:01 ]
厳しいなあw

303 名前:300 mailto:sage [2007/07/03(火) 16:21:57 ]
Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

If objIE.Top < 0 Then
ShowWindow objIE.hWnd, 9 'SW_RESTORE アクティブにもなる。
End If

で解決しました。objIE.Top < 0 は怪しいですが、良しとします。

304 名前:デフォルトの名無しさん [2007/07/03(火) 18:42:33 ]
>>295
それ、A1:E1ならできるけど
A1:A5だとうまくいかない。なんでだろ?

305 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:17:56 ]
>>302
× スレ違い指摘が厳しい
○ 質問者がVBAの範疇を理解してない

306 名前:デフォルトの名無しさん [2007/07/04(水) 17:34:35 ]
VBAというか、プログラミングの初心者です。
変数のスコープ(有効範囲?)のことでハマッっています。

UserForm1のなかの冒頭でPublicとして宣言した変数aの値を
(この値は同じくUserForm1内にPublicとして記述されたプロシージャによって代入される)
UserForm2のなかのプロシージャ内でmsgbox(a)として表示しようとするのですが、
値が空白になってなにも表示されません。
UserForm1 UserForm2のすべてのプロシージャをPublicにしても同じです。

こんなボケに対する、どなたかツッコミをお願いします。

307 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:47:03 ]
Msgbox(UserForm1.a)

理由:ユーザフォームはモジュールではなくクラスだから

308 名前:304 [2007/07/04(水) 19:03:53 ]
自己解決。
これでいけた。

Range("A1:A5") = Application.Transpose(Array("あ", "い", "う", "え", "お"))

309 名前:306 mailto:sage [2007/07/04(水) 22:42:37 ]
>>307
助言くださったとおり、うまくいきました。理由を書いてくださったのがヒントになり、
Public変数をUserFormではなく標準モジュールのほうで宣言すればいいことに
気がつきました。どうも有難うございました。


310 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 12:37:25 ]
>Public変数をUserFormではなく標準モジュールのほうで宣言すればいい

死ね

311 名前:デフォルトの名無しさん [2007/07/05(木) 21:18:05 ]
あの子ったら、また私のパンティを……。
 
息子の康彦を学校へ送りだし、洗濯にかかろうとした美沙緒は、
洗濯機のなかに無造作に放りこまれた自分のパンティを見て、大きく溜め息をついた。

困ったわ。どうすればいいのかしら?……
 パンティを手に持ったまま、美沙緒は考えこんでしまった。
 
康彦は十四歳の中学二年生。七つ年上のいまの夫と大恋愛に落ちた美沙緒が、
周囲の猛反対を押しきって、十八歳のときに産んだ子だ。
 
その康彦の不可解な行動に美沙緒が最初に気づいたのは、もう一年近くも前のことになる。



312 名前:デフォルトの名無しさん [2007/07/05(木) 21:23:27 ]
小学生の頃、同じクラスのヤシんちに行った。ソイツの姉ちゃんは高校生でキレイだった。

化粧してるのをボケーと見てた。
「何で見てるの?」
やさーしく微笑んでくれた。
「ち、ちゅーしたい!」
おいら、とっさに言った。
姉ちゃん、頭なぜなぜして、オデコにちゅーしてくれた。
「口紅ついちゃったわね」
コットンでキレイにしてくれた。
おいら、コットンを奪って逃げた。

次の日、姉ちゃんに告った。
「お姉ちゃん、彼氏いるの」
おいら「ならば、貴様を殺して永遠に我と共に」
姉ちゃん「よかろう。来るが良い」
虚空を突き破る轟音。空気を切り裂く甲高い音。
おいらの口から鮮血があふれ出す。
おいらの拳は僅かに届かず、逆に手刀が胸に突き刺さっている。崩れ落ちるおいら。
おいら「・・・これで、貴様は俺を忘れないだろう。ぐ・・」
姉ちゃん「忘れはせぬ。貴様の魂我が心と共に。悲しき男よ。誰よりも愛深く、拳でしか愛を語れぬゆえに」
死してなおその男の顔に浮かぶ表情は喜びであったか悲しみであったか。
その時、一陣の風が吹いた。
愛に死んだ修羅の魂を運び去るように。

313 名前: [2007/07/06(金) 22:24:01 ]
     00年  01年 02年 03年
     売上高 

キャベツ 500  400 300  200
ニンジン 600  300 400  500
トマト  400  400 500  400
レタス  300  500 600  300

年代別に最も多い売上高の野菜を調べるためのアルゴリズムってどうすればいいんですか?
上の例で言うと00年の売上高がもっとも高いのはニンジンなのでマクロをつかって00年
ニンジン、01年レタスというようにセルに順番に出していきたいんですがどうすればいいんで
しょうか?






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

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

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