Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


262 / 3841 ページ ←次へ | 前へ→

【77197】配列の有効数を求める(空白がある)
質問  まり  - 15/6/15(月) 17:18 -

引用なし
パスワード
   お世話になっております。

シートを配列化→データ抽出→フォーマットシートに転記

上記をしたいのですが、以下のvbaでは空白を含むシートの場合
対応できません。
空白を含む場合でも正常動作するにはどうすればよいですか。
B列は必ず値が入っております。

説明不足かもしれませんが、追記もしますので、
宜しくお願いします。


'配列の有効列数を求める
Public Function ArrayColumn(ArrayData As Variant) As Double

Dim i As Double

For i = 1 To UBound(ArrayData, 2)
  If ArrayData(1, i) = "" Then
   ArrayColumn = i - 1
   Exit For
  End If
Next

If ArrayColumn = 0 Then
  ArrayColumn = UBound(ArrayData, 2)
End If

End Function

'配列の有効行数を求める
Public Function ArrayRow(ArrayData As Variant) As Double

Dim i As Double

For i = 1 To UBound(ArrayData, 1)
  If ArrayData(i, 1) = "" Then
   ArrayRow = i - 1
   Exit For
  End If
Next

If ArrayRow = 0 Then
  ArrayRow = UBound(ArrayData, 1)
End If

End Function
・ツリー全体表示

【77196】Re:テキストボックス
お礼  翔子  - 15/6/15(月) 11:44 -

引用なし
パスワード
   β様
γ様
マナ様
kanabun様
コメントが大変遅くなりまして申し訳ございません。

マナ様のコメントで
<マウスの真ん中ボタンをくるくるしてスクロールさせたい?
<であれば、少なくとも標準機能ではできません。
マウスの真ん中ボタンでスクロールをしたかったのですが
無理のようですね。
ありがとうございます。
・ツリー全体表示

【77195】Re:32ビット用APIエラー
発言  明石屋たけし  - 15/6/15(月) 8:07 -

引用なし
パスワード
   独覚さん
ありがとうございます。

早速、新しいブックにコードを写して実行してみましたが、やはり同様のエラーが起きてしまいました。
難しいですね。。
・ツリー全体表示

【77194】Re:テキストボックス
発言  kanabun  - 15/6/14(日) 19:32 -

引用なし
パスワード
   ▼翔子 さん:

番外で...

>ネットで調べたら最大100まで表記出来ると載ってましたが、

これは 1000 でも たぶん 10000行でも可能です。
実用的にいくつくらいまでが効率よいか?という話なら別ですが。
・ツリー全体表示

【77193】Re:テキストボックス
発言  マナ  - 15/6/14(日) 15:44 -

引用なし
パスワード
   ▼翔子 さん:

マウスの真ん中ボタンをくるくるしてスクロールさせたい?
であれば、少なくとも標準機能ではできません。

でも、つい、くるくるやってしまいますね。
・ツリー全体表示

【77192】Re:テキストボックス
発言  γ  - 15/6/14(日) 10:11 -

引用なし
パスワード
   ▼翔子 さん:
> *スクロールは出来ないですよね?
>  下向き三角ボタンでスクロールしないと
>  ダメですか?

100件があって、例えば60件目がみえるようにしたい、
ということですか?
手でスクロール代わりに、自動でスクロールできないか、
ということですか?そう書いてもらわないとわからない。

.ListIndex = 60
とかすると、60件目が選択状態になって、
それが見えるところまで位置調整されると思います。

# ただ、それだと、逆に 1件目に用があったとすると、
# 手で元に戻す必要はありますけどねえ。
・ツリー全体表示

【77191】Re:テキストボックス
発言  β  - 15/6/14(日) 6:34 -

引用なし
パスワード
   ▼翔子 さん:

横から失礼します。
ユーザーフォームが表示された時点で、リストボックスにフォーカスがあれば
↑矢印、↓矢印でスクロールできますが、ご希望のスクロール方法は、どういったものですか?
・ツリー全体表示

【77190】Re:テキストボックス
質問  翔子  - 15/6/13(土) 23:58 -

引用なし
パスワード
   ▼γ さん:
>>lRow = .Range("A" & Rows.Count).End(xlUp).Row
>と、E列ではなく、A列の最終行を調べていますね。
>これは意図していることなんですか?
すみません
A列を調べてました。
ありがとうございます。

*スクロールは出来ないですよね?
下向き三角ボタンでスクロールしないと
ダメですか?
・ツリー全体表示

【77189】Re:テキストボックス
回答  γ  - 15/6/13(土) 23:11 -

引用なし
パスワード
   >lRow = .Range("A" & Rows.Count).End(xlUp).Row
と、E列ではなく、A列の最終行を調べていますね。
これは意図していることなんですか?
・ツリー全体表示

【77188】テキストボックス
質問  翔子  - 15/6/13(土) 23:06 -

引用なし
パスワード
   宜しくお願いします。
Win7 office2010を使っています。

Sheet詳細
  E    F
コード 部署名
 1   総務部
 2   人事部
・   ・
 ・   ・
100   企画部
と入っています。
Private Sub UserForm_Initialize()
  Dim lRow As Long
  With Worksheets("詳細")
    lRow = .Range("A" & Rows.Count).End(xlUp).Row
  End With
  With ListBox1
    .ColumnCount = 2
    .ColumnWidths = "70;60"
    .RowSource = "詳細!E2:F" & lRow
    .ColumnHeads = True
  End With
End Sub
とListBoxに表記してますが、1から34行目しか表記しません。
ネットで調べたら最大100まで表記出来ると載ってましたが、
上記のモジュール間違えていますでしょうか
・ツリー全体表示

【77187】Re:32ビット用APIエラー
発言  独覚  - 15/6/12(金) 13:08 -

引用なし
パスワード
   ▼明石屋たけし さん:

>エラーの種類に付きましては
>
>唐突に『Maicrosoft Excellは動作を停止しました。』というエラーメッセージが出て
>その下には『問題が発生した為、プログラムは正しく動作しなくなりました。プログラムは閉じられ、解決策がある場合はWindowsから通知されます。』と表示されます。
可能性としてブックの破損も考えられるので新しいブックを作ってそちらでも同じ状況になるか
試してはどうでしょうか?
・ツリー全体表示

【77186】Re:32ビット用APIエラー
回答  明石屋たけし  - 15/6/11(木) 17:31 -

引用なし
パスワード
   独覚さん、ご返信ありがとうございます。

今、確認しましたら
Windows の種類:Windows 7 Professional 32ビット
Excel のバージョン:Excel 2013 32ビット
でした。
と、いうことは、エラーの原因は違うのかな??

エラーの種類に付きましては

唐突に『Maicrosoft Excellは動作を停止しました。』というエラーメッセージが出て
その下には『問題が発生した為、プログラムは正しく動作しなくなりました。プログラムは閉じられ、解決策がある場合はWindowsから通知されます。』と表示されます。
その後、エラー報告を送信するかを聞いてきて、一度Excellが強制終了されてから、再度立ち上がります。

毎回、だいたい同じタイミングで落ちます。
なんだか、ますます分からなくなってきました。。
・ツリー全体表示

【77185】Re:32ビット用APIエラー
発言  独覚  - 15/6/11(木) 13:13 -

引用なし
パスワード
   ▼明石屋たけし さん:
Excelが32ビット版か64ビット版か、それと表示されるエラーが何か、とどこでエラーが
発生しているかを書いてくれませんか?
・ツリー全体表示

【77184】32ビット用APIエラー
質問  明石屋たけし  - 15/6/10(水) 17:11 -

引用なし
パスワード
   すいません、初心者で切り貼りでプログラムを組んでいます。

キー入力したらそれを確認するマクロをネット上で見つけて作成しました。
以下の通りなのですが、

---------------------------------------------------------------------------
Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Long
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Do
  If GetAsyncKeyState(37) <> 0 Then MsgBox "←キーが押されました"
  If GetAsyncKeyState(38) <> 0 Then MsgBox "↑キーが押されました"
  If GetAsyncKeyState(39) <> 0 Then MsgBox "→キーが押されました"
  If GetAsyncKeyState(40) <> 0 Then MsgBox "↓キーが押されました"

Call Sleep(1)
  DoEvents
Loop
---------------------------------------------------------------------------

当初は問題なく起動していたのですが、なんども繰り返し操作していると、エラー表示後excellが強制終了されてしまいます。

ネットでいろいろ検索をしてみると、どうやら
『Windows7が64ビット版でマクロの中で32ビット用APIを使用している』
ことが原因のようですが、私の少ない知識では解決策がみつかりません。

64ビット版でも問題の無いプログラムを教えていただけませんでしょうか。

宜しくお願い致します。
・ツリー全体表示

【77183】Re:マクロの修正とご指摘をお願いします。
発言  マルチネス  - 15/6/7(日) 10:07 -

引用なし
パスワード
   結局↓で解決したようだ。

ht tp://security.okwave.jp/qa8986361.html

他のいくつかの質問は放置。困ったチャンです。
・ツリー全体表示

【77182】Re:マクロの修正とご指摘をお願いします。
発言  Jaka  - 15/6/4(木) 17:20 -

引用なし
パスワード
   多分シート名に全角英文字が使われたんだと思います。
なんかバグっぽいですね。

2007で、シート名に「ABCD」と名付けたら、エラーになりました。
提示されたコードを実行すると、エラーになりました。

で、シート追加で「ABCD」(半角英文字)で、シート名を変えようとしたら、エラーになりました。
MSらしく最近のアップデートでのバグでは?

数年ぶりのひさびさに出てきてたったこれだけで済みません。
・ツリー全体表示

【77181】Re:マクロの修正とご指摘をお願いします。
発言  マルチネス  - 15/6/3(水) 22:29 -

引用なし
パスワード
   回答者への参考として。

ht tp://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=170163&rev=0
ht tp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14146302784
・ツリー全体表示

【77180】マクロの修正とご指摘をお願いします。
質問  タンポポポケット  - 15/6/3(水) 18:02 -

引用なし
パスワード
   マクロ初心者ですが、仕事でどうしても必要になったのでマクロを作成しています。よろしければ、マクロの修正、ご指摘いただきたいです。


「ボタンを押すと、ボタン名とシート名が一致するシートがアクティブになる」というマクロを実行したいです。

下記のマクロを実行すると、
1.シートの1枚目に、ボタンが作成(シートの枚数分)され、各シートの名前が表示される。
2.また、そのボタンをクリックすると、名前が同じシートをアクティブにする。
となる予定でした。

実行してみると、
シート名に「大文字の英語」が使われているボタンをクリックするとエラーになった。
※他の漢字やカタカナなどのシート名のボタンをクリックすると、きちんとアクティブになる。
となりました。

原因として考えられる事を教えていただき、下記のマクロを修正していただきたいです。


≪マクロの説明≫
指定のシートを選択する「シート選択」と言うマクロを用意し、
ボタン設置の時にそのマクロに引数でシート名を渡す様に設定しています。
Worksheets(n).Nameでシート名が取得されています。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub ボタン設置()
  With Worksheets(1)
    For i = 1 To (Worksheets.Count - 1)
      nX = 145 * (1 + ((i - 1) Mod 8))
      nY = 30 * (1 + Int(i / 8))
      sName = Worksheets(i + 1).Name
      With .Buttons.Add(nX, nY, 140, 20)
        .Text = sName
        .OnAction = "'シート選択""" & sName & """'"
      End With
    Next i
  End With
End Sub
Sub シート選択(sShtName As String)
  Worksheets(sShtName).Select
End Sub
・ツリー全体表示

【77179】Re:IEのリストボックスの選択
お礼  とし  - 15/6/3(水) 12:22 -

引用なし
パスワード
   for each分で探すのではなく、最初から指定する形でやってみたら
うまくいきました。

お騒がせして、申し訳ございません。

ご検討いただいた方々に、お礼申し上げます。

ありがとうございました。
・ツリー全体表示

【77178】Re:一覧から参照
回答  γ  - 15/6/2(火) 20:53 -

引用なし
パスワード
   ▼☆Nonoka☆ さん:
>返信遅くなって申し訳ありません。
>関数ですとリストが増えるため、効率に限界があります。
限界があるとは、どのくらいの行数ですか?
実際に限界に達しているのですか?


ワークシートのイベント処理についてはこちらを参照。
ht  tp://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html

------------
書き方の一例です。
これをSheet1のシートモジュールにコピーペイストしてから、
K列に入力してみてください。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim v As Variant

  If Target.Count > 1 Then Exit Sub   ' 複数領域が同時に変更されたら終了
                     ' 逆に、複数領域についても対象にしたいなら、
                     ' 繰り返し処理を行います。(応用編はそちらで)
  If Target.Column <> 11 Then Exit Sub ' K列以外なら終了

  v = Application.VLookup(Target.Value, Worksheets("Sheet2").Range("B:C"), 2, False)
  If IsError(v) Then
    MsgBox Target.Value & " は見つかりませんでした"
  Else
    Application.EnableEvents = False
    Target.Offset(0, 1).Value = v
    Application.EnableEvents = True
  End If
 
End Sub
・ツリー全体表示

262 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free