Excel VBA質問箱 IV

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

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


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

【76166】webbrowserコントロール
質問  yama  - 14/10/7(火) 10:15 -

引用なし
パスワード
   ユーザーフォームにwebbrowserコントロールを配置し、webページを開く操作をしています。このマクロを、複数のエクセルブックを開いた状態で実行すると、既に開いているタスクバー上の他のブックに切り替わらなくなります。回避策はありまsか。
・ツリー全体表示

【76165】Re:ある文字がある場合、その列を非表示
お礼  ゆーあ  - 14/10/7(火) 9:06 -

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

コメント&コードありがとうございました!
バッチリ希望の動作確認致しました!大変感動です!

コードの違いについても勉強させて頂きます!
本当にありがとうございました!!
・ツリー全体表示

【76164】Re:ある文字がある場合、その列を非表示
発言  kanabun  - 14/10/6(月) 19:49 -

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

>イメージ通りの動作を確認出来ました!!ありがとうございます!!
>検索方法や文字があるセル位置から、列を指定する方法かなり勉強になりす!

>1点だけ、
>ご説明不足で大変恐縮で御座いますが、
>4行目に「原単価」「実行単価」の文字が2箇所あります。

あ〜、そういうのはあらかじめ条件として言っておいてもらわないと、
(Match関数は最初の1つを見つけるだけなので)
書き方まるで変わってきます。

複数列のばあいの一サンプルです。

Private Sub ToggleButton1_Click()
 Dim i As Long, ss As String
 
 With ToggleButton1
   If .Caption = "非表示" Then
     For i = 1 To Me.UsedRange.Columns.Count
      Select Case Cells(4, i).Value
       Case "原単価", "実行単価"
        Columns(i).Hidden = True
      End Select
     Next
     .Caption = "表示"
   Else
     Me.UsedRange.EntireColumn.Hidden = False
     .Caption = "非表示"
   End If
 End With
End Sub
・ツリー全体表示

【76163】Re:ある文字がある場合、その列を非表示
発言  ゆーあ  - 14/10/6(月) 19:08 -

引用なし
パスワード
   ▼kanabun さん:
コメントありがとございます。
又、トグルボタンへの変更により非常にスッキリ致しました。

ご教授頂いたコードを早速実行させて頂き、
イメージ通りの動作を確認出来ました!!ありがとうございます!!
検索方法や文字があるセル位置から、列を指定する方法かなり勉強になりす!

自身でもチャレンジしてみますが1点だけ、
ご説明不足で大変恐縮で御座いますが、
4行目に「原単価」「実行単価」の文字が2箇所あります。
2箇所目に関しては、ご教授頂いたコードで非表示にならない状況ですので、
アドバイス等頂ければ幸いで御座います。

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

【76162】Re:ExcelのVBAでテキストファイルの編集...
発言  マルチーズ  - 14/10/6(月) 17:19 -

引用なし
パスワード
   ここの掲示板のルールです。

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

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

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

【76161】Re:ある文字がある場合、その列を非表示
発言  kanabun  - 14/10/6(月) 16:35 -

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

>列を挿入or削除されることがあり、現状の列指定での非表示では不具合が御座います。
>
>表の各項目は、必ず4行目(A4,B4,C4…)に記載されており、
>非表示にしたい文字も、「原単価」「実行単価」のみで御座います。

要らぬお節介ですが、コマンドボタン2つを トグルボタン1つにして、
表示/非表示をひとつのボタンで出来るようにしてみました。

ボタンのあるシートのモジュールにコードを書いておきます。

'----------- Sheetモジュール
Option Explicit

Private Sub ToggleButton1_Click()
 Dim e, m
 
 With ToggleButton1
   If .Caption = "非表示" Then
     For Each e In Array("原単価", "実行単価")
      m = Application.Match(e, Rows(4).Cells, 0)
      If IsNumeric(m) Then
        Columns(m).Hidden = True
      End If
     Next
     .Caption = "表示"
   Else
     Me.UsedRange.EntireColumn.Hidden = False
     .Caption = "非表示"
   End If
 End With
End Sub
・ツリー全体表示

【76160】Re:ExcelのVBAでテキストファイルの編集...
お礼  みその  - 14/10/6(月) 16:16 -

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

私には難しいですが、もう少し試行錯誤してみます。
・ツリー全体表示

【76159】Re:ExcelのVBAでテキストファイルの編集...
発言  kanabun  - 14/10/6(月) 11:54 -

引用なし
パスワード
   > Private Function myReplace(ss As String) As String
> (以下略)

ここは
> Private Function myReplace(s As String) As String
> (以下略)

がオリジナルでしたね
・ツリー全体表示

【76158】Re:ExcelのVBAでテキストファイルの編集...
発言  kanabun  - 14/10/6(月) 11:52 -

引用なし
パスワード
   もう一点、補足です。

上のテストでは、最初 Desktop にフォルダをつくって そこへ保存しようと試みま
したが、エラーになります。
調べたところ、コードに不備があるのではなく、保存先がデスクトップだから
ということが分かりました。管理者権限とか? そういうことが絡んできている
気がします。
とりあえず、保存先は システムドライブでない、ローカル・ドライブに変えてあります。
・ツリー全体表示

【76157】Re:ExcelのVBAでテキストファイルの編集...
発言  kanabun  - 14/10/6(月) 11:46 -

引用なし
パスワード
   補足です。

> 
>  '----ファイルを開いてテキストを読み込む
>  With New ADODB.Stream
>
New を使って ADODB.Stream のインスタンスを生成するためには あらかじめADODB
への参照設定をしておくことが必要です。

>ht tp://amano41.hateblo.jp/entry/2014/04/25/145637
>
’-----------------------------------------------------------
>ライブラリの参照設定
> デフォルトでは ADO のライブラリは読み込まれていないため,New でオブジェクト
> を生成することができず,Visual Basic Editor のコード補完機能なども働きま
> せん。 オブジェクトの生成は CreateObject 関数で可能なのですが,クラスや
> 定数にアクセスできないのは不便なので,まずはライブラリの参照設定をしま
> しょう。
’-----------------------------------------------------------
>あたりを参考に挑戦してみてください。
・ツリー全体表示

【76156】Re:ExcelのVBAでテキストファイルの編集...
発言  kanabun  - 14/10/6(月) 11:40 -

引用なし
パスワード
   流れとしてはこんな感じになるのでは、と思います。

’-----------------------------------------------------------
Option Explicit

'StreamTypeEnum
Const adTypeBinary = 1
Const adTypeText = 2

'LineSeparatorsEnum
Const adCR = 13
Const adCRLF = -1
Const adLF = 10

'StreamWriteEnum
Const adWriteChar = 0
Const adWriteLine = 1

'SaveOptionsEnum
Const adSaveCreateNotExist = 1
Const adSaveCreateOverWrite = 2


Sub Try2()
  Dim f As String
  Dim DeskTop As String
  
  'Desktop\HTML\ の UTF-8形式の*.htmlファイルを読む(改行コード:CrLf)
  DeskTop = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
  DeskTop = DeskTop & "html\" '◆テスト用
  
  f = Dir$(DeskTop & "*.html")
  Do While Len(f) > 0
    '処理
    ReplaceUTF8 DeskTop & f  '●UTF8テキストファイル読み込み
    
    '次のファイル
    f = Dir$()
  Loop
  MsgBox DeskTop & " ---- All File Replaced"
End Sub

Private Sub ReplaceUTF8(Filename As String)
  Dim ss As String
  Dim newFilename As String 'テストのため別名で保存
 
  '----ファイルを開いてテキストを読み込む
  With New ADODB.Stream
    .Type = adTypeText     'adTypeText:2
    .Charset = "UTF-8"
    .LineSeparator = adCRLF   '改行コードの指定
    .Open            'StreamObjectのOpen
    .LoadFromFile Filename   'Utf-8ファイルを Stream に読み込む
    .Position = 0        'ポインタを先頭へ(不要か?)
    ss = .ReadText()      'ReadAll As Unicode
    .Close
  End With
  
  '-------テキスト置換作業
  ss = myReplace(ss)    '● simpleさんのRegExp置換処理ルーティンへ
  
  
  '---- 変換後のテキストをUTF-8形式で保存(◆未完成)
  Dim j&
  j = InStrRev(Filename, "\")
  newFilename = "D:\HTML" & Mid$(Filename, j)
  With New ADODB.Stream
    .Type = adTypeText
    .Charset = "UTF-8"
    .LineSeparator = adLF    '改行コードは LFとする
    .Open            'StreamObjectのOpen
    .WriteText ss, adWriteChar
    .SaveToFile newFilename, adSaveCreateOverWrite
    .Close
  End With
End Sub

Private Function myReplace(ss As String) As String
(以下略)

'-----------------------------------------------------------
以上ですが、まだ不具合があります。
(1) UTF-8形式で(改行コードはわざと元とちがう LF にして)別の場所に
  保存しようとしているのですが、LFだけになっていないようです。
  (秀丸エディタで確認)
(2) 保存ファイルの先頭に(もとのUTF-8ファイルにはなかった) BOMがつきます。
  これも不要なので BOMなしで保存したいのですが、まだコード化してありません。
  これについては

ht tp://amano41.hateblo.jp/entry/2014/04/25/145637

あたりを参考に挑戦してみてください。
・ツリー全体表示

【76155】ある文字がある場合、その列を非表示
質問  ゆーあ  - 14/10/6(月) 10:02 -

引用なし
パスワード
   Win XP Excel2000
いつもお世話になっております。

価格表に、
コマンドボタン(表示、非表示)を設置しており、
非表示ボタンを押すと、指定してある列のみ非表示になるようにしております。
しかし複数人が使用する為、場合によって、
列を挿入or削除されることがあり、現状の列指定での非表示では不具合が御座います。

表の各項目は、必ず4行目(A4,B4,C4…)に記載されており、
非表示にしたい文字も、「原単価」「実行単価」のみで御座います。
以上より、
行いたいことの流れとして、
1.コマンドボタン(非表示)を押す
2.4行目(A4,B4,C4…)の文字を確認
3.4行目に「原単価」or「実行単価」と記載されている場合、その列を非表示
4.コマンドボタン(表示)を押すと、3.で非表示にした列を表示

申し訳御座いませんが、ご教授お願い致します。
・ツリー全体表示

【76154】Re:ExcelのVBAでテキストファイルの編集...
発言  kanabun  - 14/10/5(日) 20:16 -

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

>考え直してみたら、編集前も編集後もUTF-8のみでよいことがわかりました。混在していることもないので、判別も必要もないと思います。

UTF-8テキストファイルの読み書きについては、

ExcelVBA即効テクニック研究室(その15)
ht tp://moug.net/faq/viewtopic.php?t=69889

投稿日時: 14/08/02 19:34:21 投稿者: kanabun
  〜

投稿日時: 14/08/02 22:00:32 投稿者: simple

あたりが参考になると思います。
・ツリー全体表示

【76153】Re:ExcelのVBAでテキストファイルの編集...
質問  みその  - 14/10/5(日) 18:09 -

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

返信が遅れて申し訳ありません。

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

考え直してみたら、編集前も編集後もUTF-8のみでよいことがわかりました。混在していることもないので、判別も必要もないと思います。

前回丁寧に具体的なコードを書いていただいているので、それをぜひ生かしたいと考えています。

しかし私はコーディングできないので、再度お願いできますでしょうか。

下記のコードは私が書いたものではありませんが、参考になるかもしれません。

よろしければではありますが、よろしくお願い致します。

Function myReplace(s As String) As String
  Dim re As Object
  Dim s2 As String
  Dim s3 As String

  Set re = CreateObject("VBScript.RegExp")
  With re
    .Global = True
    .Pattern = "\[[^\n\r]*?\]"
    s2 = .Replace(s, "")

    .Pattern = "(\r\n|\r|\n){3,}" '3つ以上の連続した改行は二つに縮める
    s3 = .Replace(s2, "$1$1")
  End With
  Set re = Nothing
  myReplace = s3
End Function
・ツリー全体表示

【76152】Re:階段状の連続計算
お礼  トキノハジメ  - 14/10/4(土) 23:25 -

引用なし
パスワード
   ▼kanabun さん:
遅い時間にも拘らず、きっちりと教えて頂きまして大変有難う御座いました。

また勉強致しました。
今後も宜しくお願い致します。
・ツリー全体表示

【76151】Re:階段状の連続計算
発言  kanabun  - 14/10/4(土) 22:48 -

引用なし
パスワード
   つづいて?

B列は
Cells(3, 2) = 80 / R2C3
Cells(4, 2) = 80 / R2C4
Cells(5, 2) = 80 / R2C5
Cells(6, 2) = 80 / R2C6
Cells(7, 2) = 80 / R2C7

まとめると
Sub Try3b()
  [B3:B7].FormulaR1C1 = "=80/(indirect(""R2C""&ROW(),))"
End Sub

'C列は
' Cells(4, 3) = 80 / R3C4
' Cells(5, 3) = 80 / R3C5
' Cells(6, 3) = 80 / R3C6
' Cells(7, 3) = 80 / R3C7

'まとめると
Sub Try3c()
  [C4:C7].FormulaR1C1 = "=80/(indirect(""R3C""&ROW(),))"
End Sub

'D列は
' Cells(5, 4) = 80 / R4C5
' Cells(6, 4) = 80 / R4C6
' Cells(7, 4) = 80 / R4C7

'まとめると
Sub Try3d()
  [D5:C7].FormulaR1C1 = "=80/(indirect(""R""&COLUMN()&""C""&ROW(),))"
End Sub


'E列は
' Cells(6, 5) = 80 / R5C6
' Cells(7, 5) = 80 / R5C7

'まとめると
Sub Try3e()
  [E6:E7].FormulaR1C1 = "=80/(indirect(""R""&COLUMN()&""C""&ROW(),))"
End Sub


'F列は
' Cells(7, 6) = 80 / R6C7
Sub Try3f()
  [F7].FormulaR1C1 = "=80/(indirect(""R""&COLUMN()&""C""&ROW(),))"
End Sub


'以上Loopで表すと
Sub Try33()
  Dim c&, r&
  For c = 1 To 6
    r = c + 1
    Cells(r, c).Resize(7 - c).FormulaR1C1 = _
      "=80/(indirect(""R""&COLUMN()&""C""&ROW(),))"
  Next
End Sub
・ツリー全体表示

【76150】Re:フォルダー内の複数のエクセルあるセ...
お礼  ペンネーム船長  - 14/10/4(土) 22:34 -

引用なし
パスワード
   kanabunさま
Sheets(”あ”)やSheet(”あ”)やSheet(あ)・・・など10位試して
みたのですが、正解はkanabunnさんのご指摘通り『あ』ということですね。
引用コードをもっと、慎重に見るべきでした。
お陰様でやりたい事が実現出来ました。
有難う御座いました。
・ツリー全体表示

【76149】Re:階段状の連続計算
発言  kanabun  - 14/10/4(土) 22:25 -

引用なし
パスワード
   ↑タイプミス

>関節参照です。

間接参照です。
・ツリー全体表示

【76148】Re:階段状の連続計算
発言  kanabun  - 14/10/4(土) 22:23 -

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

>B1の答えがI1で、C1画の答えがJ1に、以下同じで表の中の1・2・3・4・5・6の答えが右側にI,J,K,L,M,N に出しているのを、A2,A3,A4,A5,A6,A7 と縦に出したいのです。
>表の中の 1の答えはA2の1のところで、2の答えはA3の2、のところで、以下同じで表の上三角の計算結果を、下の三角の同じ数字のところに答えをだしたいのです

では、A列だけ 順にR1C1形式で参照式を書いてみましょう。

[A2] Cells(2, 1) = 80 / R1C2
[A3] Cells(3, 1) = 80 / R1C3
[A4] Cells(4, 1) = 80 / R1C4
[A5] Cells(5, 1) = 80 / R1C5
[A6] Cells(6, 1) = 80 / R1C6
[A7] Cells(7, 1) = 80 / R1C7

まとめると、
 Cells(n, "A").FormulaR1C1 = "=80/R1Cn"

です。 この R1Cn をExcelが解る書式に直してやります。関節参照です。

Sub Try3()
  [A2:A7].FormulaR1C1 = "=80/(indirect(""R1C""&ROW(),0))"
End Sub
・ツリー全体表示

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

引用なし
パスワード
   ▼kanabun さん:
>このような表のばあい、どこにどのような結果を出力するのでしょう?
>
>  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 *   

解りにくい質問ですみません。

B1の答えがI1で、C1画の答えがJ1に、以下同じで表の中の1・2・3・4・5・6の答えが右側にI,J,K,L,M,N に出しているのを、A2,A3,A4,A5,A6,A7 と縦に出したいのです。
表の中の 1の答えはA2の1のところで、2の答えはA3の2、のところで、以下同じで表の上三角の計算結果を、下の三角の同じ数字のところに答えをだしたいのです

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

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