Excel VBA質問箱 IV

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

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


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

【76146】Re:階段状の連続計算
質問  kanabun  - 14/10/4(土) 19:50 -

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

>もう一つ教えて下さい。上の三角の計算結果を下の三角の同じ番号のところ絵答えを出すのはどこを変えればよいのでしょうか。

このような表のばあい、どこにどのような結果を出力するのでしょう?

  A B C D E  F G H  I   J   K   L   M   N
1 * 1 2 3 4  5 6   80   40   26.666 20  16   13.333
2 1 * 7 8 9 10 11   11.42 10   8.888  8   7.272
3 2 7 * 12 13 14 15   6.667 6.154  5.714 5.333 
4 3 8 12 * 16 17 18   5   4.706  4.444
5 4 9 13 16 * 19 20   4.211 4  
6 5 10 14 17 19 * 21   3.8095
7 6 11 15 18 20 21 *   
8
9
10
11
12
・ツリー全体表示

【76145】Re:階段状の連続計算
質問  トキノハジメ  - 14/10/4(土) 17:09 -

引用なし
パスワード
   kanabunさん

丁寧な解説有難うございます。

もう一つ教えて下さい。上の三角の計算結果を下の三角の同じ番号のところ絵答えを出すのはどこを変えればよいのでしょうか。

For i = 1 To 6
  Cells(i, "1").Resize(, 7 - i).FormulaR1C1 = "=75/[-" & 8 -i & "]"
Next

トライして見ましたが上手くいきません。
宜しくお願い致します。
・ツリー全体表示

【76144】Re:フォルダー内の複数のエクセルあるセ...
発言  kanabun  - 14/10/4(土) 16:59 -

引用なし
パスワード
   ▼ペンネーム船長 さん:

>下記のコードで動くのですが、シート名をWorksheet(”あ”)と記述すると
>エラーになります。どのような記述が正しいのですか。
>

>    Target = "'" & Path & "[" & buf & "]Sheet1'!R4C4"

ここをどのように書いたのですか?

    Target = "'" & Path & "[" & buf & "]あ'!R4C4"

は、やってみましたか?
・ツリー全体表示

【76143】Re:フォルダー内の複数のエクセルあるセ...
質問  ペンネーム船長  - 14/10/4(土) 16:02 -

引用なし
パスワード
   下記のコードで動くのですが、シート名をWorksheet(”あ”)と記述すると
エラーになります。どのような記述が正しいのですか。

Private Sub CommandButton1_Click()
  Dim i As Long, buf As String, Target As String
  Const Path = "C:\Users\○●\Desktop\test\"
  buf = Dir(Path & "*.xls")
  Do While buf <> ""
    Target = "'" & Path & "[" & buf & "]Sheet1'!R4C4"
    i = i + 1
    MsgBox ExecuteExcel4Macro(Target)
    buf = Dir()
  Loop
End Sub
・ツリー全体表示

【76142】Re:ExcelのVBAでテキストファイルの編集...
発言  kanabun  - 14/10/4(土) 7:52 -

引用なし
パスワード
   ▼みその さん:

>UFT-8以外の形式の場合、UFT-8の形式にします。

UTF-8の話は初めて聞いたので、上のサンプルでは通常の ShiftJISを仮定して
書いています。

そもそもUTF-8テキストとそれ以外のコード体系のテキストとが混在している
のでしたら、読み込むテキストがどんなコードで書かれているかを判別しなければ
なりませんが、あいにくぼくはそういうことに詳しくありません。
ご自分で調べるか、他の方のレスをお待ちください。

でかけますので、これ以降コメントできません。
・ツリー全体表示

【76141】Re:ExcelのVBAでテキストファイルの編集...
質問  みその  - 14/10/4(土) 6:38 -

引用なし
パスワード
   追伸です。

1.の"<"と">"はそれぞれ"["と"]"に変えてください。"<"と">"というのは誤りでした。

2.ですが、改行コードが2つ連続す場合、1つしか続かない場合は何もしません。例にあるように、編集(置換)するのは3つ以上の場合のみです。


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

【76140】Re:ExcelのVBAでテキストファイルの編集...
質問  みその  - 14/10/4(土) 6:31 -

引用なし
パスワード
   どうもありがとうございます。

>テキストファイルをOpenし、テキストを置換するコードは、分りますか?
VBAはマクロの記録を眺めたことがある程度なので、よくわかりません。申し訳ありません。

また私の説明不足で申し訳ありません。

規則を説明しなおしたので、ふたたび、よろしくお願い致します。


順番は1を行った後に2を行います。

ファイルの内容のみ変更して、ファイル名は変更しません。

UFT-8以外の形式の場合、UFT-8の形式にします。

テキストファイルの拡張子はすべてtxtです。

処理するのはフォルダに存在するすべてのテキストです。


1.

"<"と">"の間に、改行以外の文字列が入るものは空白置換。

この文章でダブルクオーテーションは下記と同じような使い方をしています。つまり、対象をくくっているだけなので、それ自体に意味はありません。

f = Dir$(DeskTop & "あいう*.txt")

例)

"<abcd>"は""に置換する

"<ab cd ef>"は""に置換する

"<#$%&'あいうabu>"は""に置換する


2.

3つの連続する改行コードがあるときは、2つの連続する改行コードに置換。

3つ以上連続する改行コードがあるときも、2つの連続する改行コードに置換。

改行コードはCRLF、CR、LFなどすべての種類があるとします。

改行コードは最大で100個ぐらい連続します。

あまり詳しくありませんが、PHPでいうstr_replaceのようなイメージかもしれません。

例)

==============================================
あいうえお  '残す改行コード←1個目の改行コード
       '残す改行コード←2個目の改行コード
       '消す改行コード←3個目の改行コード
かきくけこ  '残す改行コード←1個目の改行コード
       '残す改行コード←2個目の改行コード
       '消す改行コード←3個目の改行コード
       '消す改行コード←4個目の改行コード
       '消す改行コード←5個目の改行コード
さしすせそ  '残す改行コード←1個目の改行コード
たちつてと  '残す改行コード←1個目の改行コード
なにぬねの  '残す改行コード←1個目の改行コード
       '残す改行コード←2個目の改行コード
       '消す改行コード←3個目の改行コード
       '消す改行コード←4個目の改行コード
       '消す改行コード←5個目の改行コード
       '消す改行コード←6
はひふへほ  '残す改行コード←1個目の改行コード
==============================================

上記は下記のように置換(変換)する。

==============================================
あいうえお  '文字列と文字列の空白は0行か1行になります。

かきくけこ

さしすせそ
たちつてと
なにぬねの

はひふへほ
==============================================
・ツリー全体表示

【76139】Re:ExcelのVBAでテキストファイルの編集...
質問  kanabun  - 14/10/4(土) 0:05 -

引用なし
パスワード
   ▼みその さん:

変換の方法
>
>1.'<'と'>'の間に、改行以外の文字列で入るものは空白置換。(<abcd>や<ab cd ef>など)
>2.改行コードが2行以上のものは1行に置換。(改行コードは最大で100行ぐらい連続します。また、改行コードはCRLF、CR、LFなどすべての種類があるとします。)
>
は 文章ではよく分からないので、
具体例をあげたほうが分りやすいと思います。

[変換前のテキスト]

[変換後のテキスト]
・ツリー全体表示

【76138】Re:ExcelのVBAでテキストファイルの編集...
発言  kanabun  - 14/10/3(金) 23:13 -

引用なし
パスワード
   失礼

> f = Dir$(DeskTop & "あいう*.txt")

は こちらのチェック用です。すべてのテキストなら Try1() のとおり

 f = Dir$(DeskTop & "*.txt")

です。
・ツリー全体表示

【76137】Re:ExcelのVBAでテキストファイルの編集...
発言  kanabun  - 14/10/3(金) 23:10 -

引用なし
パスワード
   ファイルが見つかったら、Openして 置換して 保存する作業は
別プロシージャに独立させると見通しがよくなります。

Sub Try2()
  Dim f As String
  Dim DeskTop As String
  
  DeskTop = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
  DeskTop = DeskTop & "example\"
  
  f = Dir$(DeskTop & "あいう*.txt")
  Do While Len(f) > 0
    '処理
    ReplaceText DeskTop & f '別プロシージャ呼び出し
    
    '次のファイル
    f = Dir$()
  Loop
    
End Sub

Private Sub ReplaceText(Filename$)
  Dim io As Integer
  Dim buf() As Byte
  Dim ss As String
  
  '---- ファイルを開いて全文読み取り
  io = FreeFile()
  Open Filename For Binary As io
   ReDim buf(1 To LOF(io))
   Get io, , buf     '全文読み取り(ShiftJIS)
  Close io
  ss = StrConv(buf, vbUnicode) '全文Unicode文字列に変換
  
  '---- テキスト置換作業
  ' ここに 文字列ss を Replaceする作業内容を記述する  
  

  '---- 変換後のテキストを保存
  Open Filename For Output As io
   Print #io, ss;
  Close io
  
End Sub
・ツリー全体表示

【76136】Re:ExcelのVBAでテキストファイルの編集...
発言  kanabun  - 14/10/3(金) 22:43 -

引用なし
パスワード
   ▼みその さん:
>デスクトップにexampleというフォルダがあり、その中にたくさんテキストファイル(拡張子が.txt)が入っているとします。
>
>それらのファイルを中身を以下のルールに従って、書き換えます。

とりあえず、「デスクトップのexampleフォルダ」内の *.txt ファイルを Dir関数
を使って取得すればいいと思います。

--------------
Option Explicit

Sub Try1()
  Dim f As String
  Dim DeskTop As String
  
  DeskTop = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
  DeskTop = DeskTop & "example\"
  
  f = Dir$(DeskTop & "*.txt")
  Do While Len(f) > 0
    '処理
    Debug.Print DeskTop & f
    
    '次のファイル
    f = Dir$()
  Loop
    
End Sub

上の '処理 のところに、
ファイルをOpenして、やりたいテキスト置換処理を記述して、
SaveしてCloseする... という処理を書くわけですが。
テキストファイルをOpenし、テキストを置換するコードは、分りますか?
・ツリー全体表示

【76135】ExcelのVBAでテキストファイルの編集の書...
質問  みその  - 14/10/3(金) 21:31 -

引用なし
パスワード
   デスクトップにexampleというフォルダがあり、その中にたくさんテキストファイル(拡張子が.txt)が入っているとします。

それらのファイルを中身を以下のルールに従って、書き換えます。


1.'<'と'>'の間に、改行以外の文字列で入るものは空白置換。(<abcd>や<ab cd ef>など)
2.改行コードが2行以上のものは1行に置換。(改行コードは最大で100行ぐらい連続します。また、改行コードはCRLF、CR、LFなどすべての種類があるとします。)


コードをよろしくお願い申し上げます。
・ツリー全体表示

【76134】Re:Do Whileの使い方について
お礼  スパニングツリー  - 14/10/3(金) 11:49 -

引用なし
パスワード
   kanabunさん
ありがとうございます。
教えていただいた方法で改良できそうです。試してみます。
・ツリー全体表示

【76133】Re:Do Whileの使い方について
発言  kanabun  - 14/10/3(金) 11:31 -

引用なし
パスワード
   ▼スパニングツリー さん:

あと、

>tData = 15
>sData = "2,4,6,10,20,50,51,52,53,100"

のばあいなら

>Do Until CInt(sOne(j - 1)) < CInt(tOne(i)) And CInt(tOne(i)) < CInt(sOne(j))

でいいでしょうが、
たとえば、

tData = 10
>sData = "2,4,6,10,20,50,51,52,53,100"

のように検索値が 対象配列の要素のどれかにぴったり一致するケースも考えられる
ときは、

Do Until CInt(sOne(j - 1)) <= CInt(tOne(i)) And CInt(tOne(i)) <= CInt(sOne(j))

と手入れをしておいたほうがいいでしょうね

# 後の祭りコメントばかりですが...
・ツリー全体表示

【76132】Re:プログレスバー
お礼  mo-  - 14/10/3(金) 10:46 -

引用なし
パスワード
   ライセンス違反になりそうですね。

使わないようにします。

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

【76131】Re:プログレスバー
発言  カリーニン  - 14/10/3(金) 10:39 -

引用なし
パスワード
   今回の件に当てはまるかわかりませんが少し気になったので。

ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=40850;id=excel
・ツリー全体表示

【76130】プログレスバー
質問  mo-  - 14/10/3(金) 10:14 -

引用なし
パスワード
   windows7 pro
excel2013

プログレスバーを配置したくて利用可能なコントロールにチェックをいれました。

 Microsoft ProgressBar Control,version6.0

ライブラリは登録されていません。

 と警告がでます。

 どうしたらいいのでしょうか?
・ツリー全体表示

【76129】Re:階段状の連続計算
発言  kanabun  - 14/10/2(木) 23:51 -

引用なし
パスワード
   >だから、
>ループで書き出すのなら、
>Sub Try1()
> Dim i&
>  For i = 1 To 6
>   Cells(9, i).FormulaR1C1 = "=SUM(R" & (i + 1) & "C:R[-2]C"
>  Next
>End Sub

こちらLoopしないで書くなら
 
[A9:F9].FormulaR1C1 = "=SUM(indirect(""R""&COLUMN()+1&""C"",0):R[-2]C)"

こうでいいみたいです.
・ツリー全体表示

【76128】Re:Do Whileの使い方について
発言  kanabun  - 14/10/2(木) 17:29 -

引用なし
パスワード
   ▼スパニングツリー さん:

> 私の想定ではjは4になるのですが

蛇足ながら、
sDataが 数値データの配列と考えると、昇順で要素が並んでいるから、
j は Loopしなくとも、以下のようでも求めることができます。

Sub Try1()
  Dim j As Long
  Dim sData
  sData = Array(2, 4, 6, 10, 20, 50, 51, 52, 53, 100)
  
  j = Application.Match(15, sData, 1)
  MsgBox j
End Sub
・ツリー全体表示

【76127】Re:Do Whileの使い方について
お礼  スパニングツリー  - 14/10/2(木) 17:25 -

引用なし
パスワード
   ▼独覚 さん:
>▼スパニングツリー さん:
>Do While
>は条件が真の間繰り返す、ですよ。
>
>条件が真になるまで(偽の間)繰り返すは
>Do Until
>です。

なるほど、道理で…。すみません勘違いしていました。
ありがとうございました。
・ツリー全体表示

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