Excel VBA質問箱 IV

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

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


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

【78868】Re:フラグが立つ全通りの表示
発言  γ  - 17/2/14(火) 22:48 -

引用なし
パスワード
   引数の型宣言を忘れていました。
Function do_task(i As Long, j As Long, k As Long, p As Long)
・ツリー全体表示

【78867】Re:フラグが立つ全通りの表示
回答  γ  - 17/2/14(火) 20:52 -

引用なし
パスワード
   > このフラグを使って計算をしたいと考えており
ということは、
> 1回目 1 0 0
> 2回目 0 1 0
> 3回目 0 1 0
別に上のような表を書くこと自体が
最終的な目標ではないんでしょうかねえ。
もう少し実行したいことを明確に書いて欲しい。

返事も無いから、また放置組なんでしょうか。
まあいいや。

とりあえず、その表を書くコードを示して置こう。
A1:A3に○回目という文字列を入れた状態で、
以下を実行してください。

Sub test()
  Dim i As Long
  Dim j As Long
  Dim k As Long
  Dim p As Long
  p = 1
  For i = 1 To 3
    For j = 1 To 3
      For k = 1 To 3
        Call do_task(i, j, k, p)
      Next
    Next
  Next
End Sub
Function do_task(i, j, k, p)
  p = p + 4
  Cells(1, 1).Resize(3, 1).Copy Cells(p, 1)
  Cells(p, 2).Resize(3, 3).Value = 0
  Cells(p, 1 + i).Value = 1
  Cells(p + 1, 1 + j).Value = 1
  Cells(p + 2, 1 + k).Value = 1
End Function
・ツリー全体表示

【78866】Re:フラグが立つ全通りの表示
発言  γ  - 17/2/14(火) 7:37 -

引用なし
パスワード
   >3回に1回必ず当たるくじ
というのもどういうものかと思いますし、
>1回目 1 0 0
のそれぞれの1,0,0の意味もわかりません.
一つだけ当たりの入った籤を、3人が同時に引くと言うことですか?
それを3回繰り返す時の、全パターンを列挙する、と。

For i = 1 to 3
  For j = 1 to 3
   For k = 1 to 3
     i,j,kを使って作業をする
   Next
  Next
Next
というのが基本形でしょう。
ご自分でトライしてみて、つまったところでまた質問してください。
・ツリー全体表示

【78865】フラグが立つ全通りの表示
質問  あらけい  - 17/2/14(火) 0:14 -

引用なし
パスワード
   よろしくお願いします。

3回に1回必ず当たるくじを複数回おこないます。
このとき、はずれはセルに「0」を、当たりは「1」としてフラグを立てます。

1回目 1 0 0
2回目 0 1 0
3回目 0 1 0

3回おこなうケースだと27通りが考えられると思います。
(x回では、3^x通りだと思いますが…)

このフラグを使って計算をしたいと考えており
要は、全パターンを順番に表示させていきたいのです。

よい方法があれば、ご教示願います。
・ツリー全体表示

【78864】Re:特定の指名した氏名にバックカラーを...
お礼  トキノハジメ  - 17/2/12(日) 18:51 -

引用なし
パスワード
   ▼β さん:
早速のご指導有難う御座います。

vbRed 等の記述は初めてですので勉強になります。

色々試してみます。

これからも宜しくお願い致します。

有難うございました。
・ツリー全体表示

【78863】Re:特定の指名した氏名にバックカラーを...
発言  β  - 17/2/12(日) 17:28 -

引用なし
パスワード
   ▼トキノハジメ さん:

回答の前に。

・条件付書式はもちろんご存知ですよね?
・マクロ記録も、もちろんご存知ですよね?

>コードに埋め込んで問題なく動いております。

まず、この設定を反映させるセル領域が、シート上で決まっていれば
あるいは、行数は増減しても、列についいては開始行も含めてきまっていれば
手作業で、条件付き書式を1度、このシートに設定しておけば、マクロでは
何もしなくてもOKなんですよ?

また、仮に手作業ではなく、その1度限りの処理でもマクロで行いたい
ということであれば、私がアップしたコードの、設定対象領域を必要なものにして
1回実行すればいいわけで、毎回、マクロ実行するたびに設定をやりなおす必要は
全くありません。
(まぁ、その都度やり直しても実害はないですが)

で、背景色とともに、文字色も変えたいということなら、その条件付き書式設定の
操作を行う。それをマクロ記録してみる。

できあがったコードと私がアップしたコードを見比べれば、どこに何を追加したら
いいかが、たちどころにわかると思いますが?

まぁ、それらは、今後のトキノハジメさんの開発に生かしてもらうとして
面倒なので(?)以下。


Sub Sample()
  With Range("A1", Cells(1, Columns.Count).End(xlToLeft))
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:= _
      "=OR(A1=""山田"",A1=""沼田"")"
    With .FormatConditions(.FormatConditions.Count)
      With .Interior
        .PatternColorIndex = xlAutomatic
        .Color = vbRed
        .TintAndShade = 0
      End With
      With .Font
        .Color = vbWhite
      End With
    End With
    .FormatConditions.Add Type:=xlExpression, Formula1:= _
      "=OR(A1=""川田"",A1=""西村"")"
    With .FormatConditions(.FormatConditions.Count)
      With .Interior
        .PatternColorIndex = xlAutomatic
        .Color = vbCyan
        .TintAndShade = 0
      End With
      With .Font
        .Color = vbWhite
      End With
    End With
  End With
End Sub
・ツリー全体表示

【78862】Re:特定の指名した氏名にバックカラーを...
質問  トキノハジメ  - 17/2/12(日) 16:12 -

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

有難うございます。コードまで頂いてすみません。
コードに埋め込んで問題なく動いております。
一つ甘えついでに教えて下さい。バックカラーをつた文字を色をしろにしたいのですが、宜しくお願い致します・
・ツリー全体表示

【78861】Re:特定の指名した氏名にバックカラーを...
お礼  トキノハジメ  - 17/2/12(日) 16:07 -

引用なし
パスワード
   ▼マナ さん:
ありがとうございます。
・ツリー全体表示

【78860】Re:ファイル移動
お礼  ピアニッチ  - 17/2/12(日) 11:37 -

引用なし
パスワード
   コード内容を検証しながら、動作確認を致しました。
ファイル選択ではダイアログを使用した方がパス取得に効果的なのですね。

'元ファイルフォルダの親フォルダ
  path1 = Range("C12").Value
課題として親フォルダが複数あるケース(Range("C13").Value)で同様にファイルを移動後、ファイル名を変更するという処理があるのですが、まずは自力で行いたいと思います。

ご回答して頂いた方々、お世話になりました。
・ツリー全体表示

【78859】Re:worksheetのコピー貼り付け
発言  γ  - 17/2/12(日) 9:59 -

引用なし
パスワード
   修正すべき最大のものは、
>・検索対象のシートが特定されていない。
のところです。

標準モジュールに書かれたプロシージャで、
シート名が省略されると、現在アクティブなシートが前提とされます。
ループ内の後半で、"請求書鑑"がアクティブにされていますから、
次の検索処理では、そのシートのなかを検索してしまうことになります。

こういったことを頭に置いて、
コードに手を入れてください。

もう完成しているなら良いけれど、そうでないならQ/Aを続けたらどうかと。
・ツリー全体表示

【78858】Re:ファイル移動
発言  β  - 17/2/11(土) 23:43 -

引用なし
パスワード
   ▼ピアニッチ さん:

新しいファイル名をどうしたいのかが見えませんので以下では
N1.jpg のままにしてあります。(★ のところ)
ここは、実際のものに変えてください。

移動シート.xls というのは、このマクロブックのことだという前提。

現在の構成は ある親フォルダ配下のサブフォルダを INPUTBOX入力で
指定させ、そのサブフォルダ内の N1.jpg を対象にしていますね。
そうではなく、直接、ファイル選択ダイアログで、N1.jpg を選ばせたほうが
よろしいかとは思いますが、そちらの構成通り、まずフォルダを選ばせます。
ただし、INPUTBOX ではなくフォルダ選択ダイアログを表示して選択させます。

Sub Sample()
  Dim myFso As Object
  Dim path1 As String
  Dim oPath As String
  Dim nPath As String
  Dim oName As String
  Dim nName As String
  Dim oFile As String
  Dim nFile As String
  
  oName = "N1.jpg"
  nName = "N1.jpg"    '★
  
  Set myFso = CreateObject("Scripting.FileSystemObject")
  '元ファイルフォルダの親フォルダ
  path1 = Range("C12").Value
  If Right(path1, 1) <> "\" Then path1 = path1 & "\"
  'フォルダ選択
  With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = path1
    .Title = "フォルダを選んでください"
    .Show
    If .SelectedItems.Count = 0 Then Exit Sub  'キャンセルボタン
    oPath = .SelectedItems(1)
  End With
  
  nPath = ThisWorkbook.Path
  oFile = oPath & "\" & oName
  nFile = nPath & "\" & nName
  
  '転記元 N1.pdf の存在チェック
  If Not myFso.fileexists(oFile) Then
    MsgBox "ファイルが存在しません"
    Exit Sub
  End If
  '転記先ファイルの削除(念のため)
  If myFso.fileexists(nFile) Then myFso.GetFile(nFile).Delete Force:=True
  'ファイル移動
  myFso.MoveFile oFile, nFile
  
  MsgBox "ファイルを移動しました"
  
End Sub
・ツリー全体表示

【78857】Re:ファイル移動
発言  ピアニッチ  - 17/2/11(土) 23:16 -

引用なし
パスワード
   ご教授の程、よろしくお願いします。


Sub 転送()
  Dim myFso As Object
  Dim path1 As String
  Dim path2 As String
  Dim path3 As String
  Dim day As String
  Dim oFilN1 As String
  Dim nFilN1 As String
  Debug.Print
  Set myFso = CreateObject("Scripting.FileSystemObject")
  '移動元ファイルの検索と移動先の指定
  path1 = Range("C12")
  day = InputBox("日付を入力して下さい")
  If day <> Empty Then
    day = CInt(day)
  Else
    Exit Sub
  End If
  oFilN1 = Dir(path1 & "\" & day & "\" & "N1.jpg")
  nFilN1 = Workbooks("起動シート.xls").path
  MsgBox oFilN1

  
  If Not myFso.fileExists(filespec:=oFilN1) Then
    myFso.MoveFile oFilN1, nFilN1
  End If
  Set myFso = Nothing
End Sub
  
・ツリー全体表示

【78856】Re:ファイル移動
発言  β  - 17/2/11(土) 23:00 -

引用なし
パスワード
   ▼ピアニッチ さん:

>質問の際、記述を誤って投稿してしまいました。

掲示板にコードを手打ちされたんですか?
混乱の元です。

実際のコードをコピペでアップしてください。
・ツリー全体表示

【78855】Re:ファイル移動
回答  ピアニッチ  - 17/2/11(土) 22:38 -

引用なし
パスワード
   >oFilN1 = Dir(path1 & "\" & day & "\" & "N1.jpg", vbNormal)

>myFso.MoveFile oFilN1, nFilN1

おっしゃる通り、oFilN1 は N1.jpg(ファイル名) と返ってきます。
なぜフォルダパス文字列が返ってこないのか理解できていません。
フォルダパス文字列が返ってこない為、移動ができていない状況です。

>If Not myFso.fileExists(filespec:=oFilN1) Then
判定に関して・・特に強い意味はありません。

> Replace(path1 & buffer1, "N1.jpg", "N1#1_001.jpg")
質問の際、記述を誤って投稿してしまいました。
申し訳ありません。

なにぶん、素人の為意味不明な点が多々あると思いますが、
ご理解いただきたい。
・ツリー全体表示

【78854】Re:ファイル移動
発言  β  - 17/2/11(土) 21:51 -

引用なし
パスワード
   ▼ピアニッチ さん:

ちょっと 危なっかしいコードですね。

oFilN1 = Dir(path1 & "\" & day & "\" & "N1.jpg", vbNormal)

もし、N1.jpg が指定フォルダにない場合、oFilN1 は 空白値("")になります。
存在していたとしても oFilN1 は N1.jpg だけ(ファイル名だけ)になります。

If Not myFso.fileExists(filespec:=oFilN1) Then

ここでファル名しか与えていない(パス文字列がない)のもきわめて気になります。

仮に N1.jpg が指定フォルダにあっても、FSOから見れば、どのフォルダ?
(カレントディレクトリーだと判断?)結果は 存在しないと判定 --> MoveFileは実行される。

N1.jpg がなければ、もちろん ないと判定され MoveFileが実行される。

myFso.MoveFile oFilN1, nFilN1

この時、oFilN1 の値はどうなっているでしょうか?
ちゃんとしたフォルダパス文字列も含んだファイルフルパス文字列になっているでしょうか?

そもそもが、If Not myFso.fileExists(filespec:=oFilN1) Then
ここでは何を判定したかったのですか?

で、

Replace(path1 & buffer1, "N1.jpg", "N1#1_001.jpg")

これは何をしているつもりでしょう。
単に、メモリー内の文字列を変換しているだけですけど?
・ツリー全体表示

【78853】Re:ファイル移動
発言  マナ  - 17/2/11(土) 21:34 -

引用なし
パスワード
   ▼ピアニッチ さん:

こういうときは、ステップ実行で、変数に何がはいっているか確認するとよいです。
ところで、movefileで、名前も変えてしまえばよいと思います。
・ツリー全体表示

【78852】ファイル移動
質問  ピアニッチ  - 17/2/11(土) 19:26 -

引用なし
パスワード
   ワークシートにパスが入力されています。そのパスの直下にInputBoxで指定した数字名のフォルダに複数のファイルが存在しています。
InputBoxで指定した数字名のパスの中にある"N1.jpg"を指定されたフォルダに移動後、ファイル名の変更をしたいのですが
下記の箇所でファイルが見つかりませんとエラーが出てしまいます。
どのように処理すれば良いでしょうか。よろしくお願いします。
問題箇所:myFso.MoveFile oFilN1, nFilN1


Sub 転送()
Dim myFso As Object
Dim path1 As String
Dim day As String
Dim oFilN1 As String
Dim nFilN1 As String
Dim buffer1 As String

Set myFso = CreateObject("Scripting.FileSystemObject")
'移動元ファイルの検索と移動先の指定
path1 = Range("C12")
day = InputBox("日付を入力して下さい")
If day <> Empty Then
day = CInt(day)
Else
Exit Sub
End If
oFilN1 = Dir(path1 & "\" & day & "\" & "N1.jpg", vbNormal)
nFilN1 = Workbooks("起動シート.xls").path
If Not myFso.fileExists(filespec:=oFilN1) Then
myFso.MoveFile oFilN1, nFilN1
End If

'フォルダ内の画像ファイル名を変更
buffer1 = Dir(path1 & "\" & "N1.jpg", vbNormal)
If buffer1 <> Empty Then
Name path1 & buffer1 As Replace(path1 & buffer1, "N1.jpg", "N1#1_001.jpg")
Else
MsgBox "N1.jpgがありません"
End If
Set myFso = Nothing
End Sub
・ツリー全体表示

【78851】Re:worksheetのコピー貼り付け
お礼  のんぼ  - 17/2/11(土) 15:24 -

引用なし
パスワード
   ▼γ さん:
>ヒントを回答しているのに無視ですか?
>返事くらいしたらどうでしょう。
申し訳ありません
返事が遅くなりました。
for each を使ってみるようにします。また、変数宣言の型を入れるようにします。
どうもありがとうございました。
・ツリー全体表示

【78850】Re:列の挿入
お礼  トシ坊  - 17/2/11(土) 14:16 -

引用なし
パスワード
   γ さんありがとうございます。
試してみたら上手く出来ました。
・ツリー全体表示

【78849】Re:列の挿入
回答  γ  - 17/2/11(土) 9:38 -

引用なし
パスワード
   Selectが余計な動作を引き起こす例です。
Selectせずに、
Columns("C:C").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
とします。
・ツリー全体表示

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