Excel VBA質問箱 IV

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

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


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

【78332】Re:VBAの質問です。
発言  VBA初心者  - 16/7/18(月) 20:07 -

引用なし
パスワード
   丁寧にありがとうございます。m(__)m
条件分岐というものを使って出来ないでしょうか!?
せっかく、書いてくださったのにすみません。
・ツリー全体表示

【78331】Re:VBAの質問です。
発言  マナ  - 16/7/18(月) 19:45 -

引用なし
パスワード
   ▼VBA初心者 さん:

作業用シートを使う案です。
質問Aだけの例です。
使えそうであれば修正してご使用ください。

1行目に質問文を入力しておきます。
2行目に正解を入力しておきます。
3行目は、空欄で回答入力用です。
4行目には計算式を入力してきます。
例えば、A4:=(A2=A3)*1

Option Explicit

Sub test()
  Dim ws As Worksheet
  Dim 問1 As String
  Dim 答1
 
  Set ws = Sheets("Sheet1")
  ws.Rows(3).ClearContents
  
  問1 = ws.Cells(1, 1).Value
  答1 = Application.InputBox(問1, Type:=1)
  
  If VarType(答1) = vbBoolean Then Exit Sub
  
  ws.Cells(3, 1).Value = 答1

  MsgBox "正答数:" & WorksheetFunction.Sum(ws.Rows(4))
  
End Sub
・ツリー全体表示

【78330】Re:VBAの質問です。
発言  VBA初心者  - 16/7/18(月) 19:08 -

引用なし
パスワード
   ▼マナ さん:
>▼VBA初心者 さん:
>
>質問Aについて教えて下さい。
>例えば、どんな質問でしょうか。
>また答えは、自由回答、それとも選択式?

質問Aは、重力加速度の値を有効数字2桁で書け。
質問Bは、仕事当量の値を有効数字2桁で書け。
どちらも記述式です。
・ツリー全体表示

【78329】Re:VBAの質問です。
発言  マナ  - 16/7/18(月) 18:33 -

引用なし
パスワード
   ▼VBA初心者 さん:

質問Aについて教えて下さい。
例えば、どんな質問でしょうか。
また答えは、自由回答、それとも選択式?
・ツリー全体表示

【78328】VBAの質問です。
質問  VBA初心者  - 16/7/18(月) 17:49 -

引用なし
パスワード
   今、VBAでプログラミングを行っているのですが、inputboxを使い、Aという質問に対し、間違っていれば「間違いです」と表示し、当っていればBという質問を表示させ、AとB両方当っていれば、「両方正解」、Aだけ当っていれば、「1つだけ正解」と表示させたいのですが、わかりません。
よろしくお願いしますm(__)m
・ツリー全体表示

【78327】Re:「FileSearch」代替クラスの作り方
発言  γ  - 16/7/18(月) 14:36 -

引用なし
パスワード
   書き忘れたけれども、もちろん、こちらでそのコードが
正常に動いていることを確認したうえで、発言しています。

なんらかの環境的なことが悪さをしているものと思います。
それは、そちらで原因追及のトライをしないと分からない性質のものです。
# こちらのテスト実行が不十分の可能性もありますが。
・ツリー全体表示

【78326】Re:「FileSearch」代替クラスの作り方
発言  γ  - 16/7/17(日) 10:28 -

引用なし
パスワード
   ▼Gyouko さん:
>「70:書き込みできません」とのエラーが出力されてしまう。

そのエラーが起きたのはどこの行でしょうか。
ステップ実行して、配下の条件に合致したパス名たちの取得ができているかどうか
確認してください。
そのエラーメッセージだけでは原因がわからないと思います。
・ツリー全体表示

【78325】「FileSearch」代替クラスの作り方
質問  Gyouko  - 16/7/16(土) 16:51 -

引用なし
パスワード
   以下状況にてエラーが発生してしまい苦戦しております。
他力本願で恐縮ですが、どうすれば改善出来るかご教示頂けると幸いです。

<前提>
・社内規定によりエクセルファイルにパスワードを設定。
・内部管理の観点より週次でパスワード有無チェックを実施。
・点検の簡素化のために、退職した前任者がマクロを作成。
・今般、エクセル2003から2013にアップデートしたところ、
 マクロが正常に作動しなくなったので修正したい。

<質問事項>
WEBで調べた結果、Office2007以降FileSearchオブジェクトが
使用不可となった為、作動しなくなったものと思われる為、
以下URLを参考に、クラスモジュールへのインポート及び
「With Application.FileSearch」を「With New FileSearchClass」へ
変更したところ、「70:書き込みできません」とのエラーが出力されてしまう。
d.hatena.ne.jp/xixiixiiixiv/20120806/1344258369

<マクロ>
Option Explicit

Sub samples()
Application.EnableEvents = False
Application.DisplayAlerts = False
ActiveWorkbook.UpdateLinks = xlUpdateLinksNever
Application.ScreenUpdating = False


  Dim f, buf As String, cnt, rc As Long, FSO 'As Object
  Set FSO = CreateObject("Scripting.FileSystemObject")
  With Application.FileSearch
    .NewSearch
    buf = "*.xls"
    If buf = "" Or buf = "False" Then Exit Sub
    .FileName = buf
    buf = GetFolder("検索を開始するフォルダを指定してください")
    If buf = "" Then Exit Sub
    .LookIn = buf
    .SearchSubFolders = True
    If .Execute() > 0 Then
      For Each f In .FoundFiles
        cnt = cnt + 1
        
        rc = kensaku(f)
        Cells(cnt, 1) = f
        If rc = 1 Then
          Cells(cnt, 2) = "パスワード有り"
        Else
          Cells(cnt, 2) = "パスワード無し"
        End If
      
      Next f
    Else
      MsgBox "見つかりませんでした"
    End If
  End With
  Set FSO = Nothing
Application.ScreenUpdating = True

End Sub

Function GetFolder(msg As String)
  Dim Shell, myPath
  Set Shell = CreateObject("Shell.Application")
  Set myPath = Shell.BrowseForFolder(&O0, msg, &H1 + &H10)
  If Not myPath Is Nothing Then
    GetFolder = myPath.Items.Item.Path
  Else
    GetFolder = ""
  End If
  Set Shell = Nothing
  Set myPath = Nothing
End Function


Function kensaku(ByVal f As String) As Integer


Dim xlApp As Application
Dim xlbook As Workbook

Set xlApp = CreateObject("Excel.Application")
Set xlbook = Nothing
On Error Resume Next
Set xlbook = xlApp.Workbooks.Open(f, Password:="", UpdateLinks:=0, ReadOnly:=True, _
       IgnoreReadOnlyRecommended:=True, Notify:=False)
If Err.Number <> 0 Then
If Err.Number = 1004 Then
kensaku = 1
Else
kensaku = 0
Application.DisplayAlerts = False
xlbook.Close savechanges:=False
Application.DisplayAlerts = True
End If
Else
End If
On Error GoTo 0
Application.DisplayAlerts = False
'xlbook.saved =true
xlApp.Quit
Application.DisplayAlerts = True
Set xlApp = Nothing
Set xlbook = Nothing
End Function

Private Sub commanbutton1_click()
Application.Run "点検ツール.xls!sheet1.samples"
End Sub
・ツリー全体表示

【78324】Re:条件付き書式 適用先
発言  β  - 16/7/13(水) 16:30 -

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

>一から設定し直すしかないんですかね


いえいえ。
マクロ記録すると、そういったコードが生成されてしまうということです。
マナさんレスの通りModifyAppliesToRangeを使えばよろしいかと。

たとえば A1 に設定されている条件付書式の適用領域を A1:A100 に変更するなら

Range("A1").FormatConditions(1).ModifyAppliesToRange Range("A1:A100")

と1行でOKだと思います。
・ツリー全体表示

【78323】Re:条件付き書式 適用先
発言  GG  - 16/7/13(水) 16:08 -

引用なし
パスワード
   ▼β さん:
ありがとうございます


一から設定し直すしかないんですかね

行追加や
データの削除などしている間に

条件付き書式の設定が多い中
条件付き書式が適用先がバラバラですごいことになっているんで
適用先を修正する物を作りたかったんですが
・ツリー全体表示

【78322】Re:条件付き書式 適用先
発言  β  - 16/7/13(水) 6:49 -

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

失礼します。

亀マスターさんの指摘の通り、マクロ記録すればコード生成されると思いますが?
記録時、マクロの保存先(I) は 「作業中のブック」になっていましたか?

それはさておき、亀マスターさんがアップされたコードは、新規条件設定ではないでしょうか?
すでに設定済みの条件があって、その領域を選択して、適用領域を変更すると
最初に、既存の条件の削除が生成されると思います。

いずれにしても、あらためて、同じ条件で(適用領域だけを変えて)設定するコードになりますね。

マナさんレスのように ModifyAppliesToRange が生成されるとスマートなんですけどね。
・ツリー全体表示

【78321】Re:条件付き書式 適用先
発言  亀マスター  - 16/7/13(水) 0:37 -

引用なし
パスワード
   Excel2013ならマクロ記録で拾えると思うのですがね。

ちなみに、手元のExcel2010でマクロ記録したら次のようなコードになりました。

  Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _
    Formula1:="=100"
  Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
  With Selection.FormatConditions(1).Font
    .Color = -16383844
    .TintAndShade = 0
  End With
  With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .Color = 13551615
    .TintAndShade = 0
  End With
  Selection.FormatConditions(1).StopIfTrue = False
・ツリー全体表示

【78320】Re:条件付き書式 適用先
発言  マナ  - 16/7/12(火) 20:28 -

引用なし
パスワード
   ▼GG さん:
使ったことありませんが、
ModifyAppliesToRange
で何とかなりませんか?

ht tp://excel-ubara.com/excelvba1/EXCELVBA391.html
・ツリー全体表示

【78319】条件付き書式 適用先
質問  GG  - 16/7/12(火) 12:48 -

引用なし
パスワード
   初めまして

Excel2013
Windows7


条件付き書式 適用先を
VBAで訂正したいのですが
わからず
記録してみましたが
記録にとれませんでした

何か方法、教えて頂きたいのです
よろしくお願いいたします
・ツリー全体表示

【78318】Re:sheet1の商品コードをsheet2に記入さ...
回答  lonelysocrates  - 16/7/4(月) 23:31 -

引用なし
パスワード
   xlFilterValuesはExcel2007で新設された機能です。
Excel2013で試すとこのままで動きました。
・ツリー全体表示

【78317】Re:sheet1の商品コードをsheet2に記入さ...
発言  マルチネス  - 16/6/26(日) 17:05 -

引用なし
パスワード
   本HPの基本ポリシーです。

ht tp://www.vbalab.net/bbspolicy.html
 
>マルチポストについて
>別のサイト(掲示板)にまったく同じ目的の投稿をすることを、一般に「マルチポスト」といいます。当質問箱では、マルチポストは原則認めています。つまり、ほかのサイトで質問したことをこのサイトで質問してもかまわないということです。

>しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」ということを宣言してください。そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。質問しっぱなし、というのはモラルに反します。「解決したからいいや」というのではありません。

>また、マルチポストを明示的に禁止しているサイトとのマルチポストをしてはいけません。
・ツリー全体表示

【78316】sheet1の商品コードをsheet2に記入されて...
質問  トム  - 16/6/26(日) 10:22 -

引用なし
パスワード
   sheet1の商品コードをsheet2に記入されている商品コードのみ表示したいです。
商品コードは複数あり変更もあるため、動的にフィルターをかけたいのですが、以下のコードだとフィルターがかかりません。
どこが問題でしょうか?

Sub test()

Dim ee As Long
Dim matrix() As String


For ee = 1 To Worksheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row
ReDim Preserve matrix(ee - 1)
matrix(ee - 1) = Worksheets("Sheet2").Cells(ee, "A").Value
Next

Worksheets("Sheet1").Activate

Selection.AutoFilter
Range("A1").AutoFilter Field:=1, Criteria1:=matrix, Operator:=xlFilterValues

End Sub
・ツリー全体表示

【78315】Re:Randomwalk
発言  β  - 16/6/24(金) 20:32 -

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

またまたコード不備発見。
A1を左上隅にして実行すれば問題は顕在化しませんが、スクロールされた状態であっても
VisibleRangeを相手にしているのに、その底辺と右端のセットに不備がありました。

Sample/Sample2ともに

  With ActiveWindow.VisibleRange
    t = .Row
    b = .Rows.Count
    l = .Column
    r = .Columns.Count
  End With

これを

  With ActiveWindow.VisibleRange
    t = .Row
    b = .Rows.Count + .Row - 1
    l = .Column
    r = .Columns.Count + .Column - 1
  End With

こうかえてください。
・ツリー全体表示

【78314】Re:Randomwalk
発言  カエムワセト  - 16/6/24(金) 18:36 -

引用なし
パスワード
   >行と列が0にならないようにする処理はβ さんのプログラムではどこに書かれてますか?

まずはβさんのコードの解釈を一行づつ付けて行ってみては?
そうすると自ずと分かってくると思います。
・ツリー全体表示

【78313】Re:Randomwalk
発言  β  - 16/6/24(金) 13:40 -

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

通常、あるセルから1つ移動させるとしたら
左上、上、右上
左、右
左下、下、右下
この8方向ですね。
でも、セルの場所によっては、上にいけない、左にいけないといった制約がある場所がありますね。

で、私のコードでは、左上、上、右上、左、右、左下、下、右下 を 1,2,3,4,5,6,7,8 という番号で指定。
現在のセルの場所に応じて、そのセルから移動できる場所番号を配列に格納。
(場所によって、8か所、5か所、3か所)
pos = Array(5, 7, 8) や pos = Array(1, 2, 4, 6, 7) といったところです。

で、この配列内からランダムに要素を1つ取り出し、1〜8 に応じて、現在の行や列に対して必要な変更を行っています。
Case 1: i = i - 1: j = j - 1 や Case 7: i = i + 1 といったところです。

なので、0 になるのを防ぐというより、最初から候補として、0にならないものに絞っているといったほうが
よろしいかもしれませんね。

そちらのコードの、その部分(0を回避)については 各コードブロックで r と c を求めた後
c が 0 なら c を 1 にする、r が 0 なら r を 1にするといった【逃げ】のコードを追加 といった感じですかね。
これで 0 になってエラーになるのは回避されるでしょうけど、右と下の枠も設定しておかなければ、どんどんと
見えない場所にいってしまいますね。


・ツリー全体表示

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