Excel VBA質問箱 IV

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

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


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

【81446】表へ転記で途中から上書きを繰り返したい
質問  もち  - 20/8/6(木) 12:58 -

引用なし
パスワード
   登録した情報を別シートの一覧表に転記していき、一行目から順に100個転記したら101個目からはまた一行目へ戻り上書きしていくものを作りたいです。

現在、100個転記するものは作ることができましたが、空欄チェックを条件にすると上書きはできないので、なにかいい方法がないかと考えています。
初学者なため思いつかず… 知識を与えていただきたいです…!

※表が2行目から始まるのでiの初期値は2にしています。

Dim i
For i = 2 To 101
  If Sheets("表").Range("A" & i).Value = "" Then
   Sheets("表").Range("A" & i).Value = Sheets("入力").Range("C2").Value
   Sheets("表").Range("B" & i).Value = Sheets("入力").Range("C3").Value
   Sheets("表").Range("C" & i).Value = Sheets("入力").Range("C4").Value
   Exit For
 End If
Next i
・ツリー全体表示

【81445】Re:ジャンプ先を印刷範囲に設定→印刷 ...
質問  初心者  - 20/8/6(木) 9:14 -

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

度々ありがとうございます。

>1)そのマクロをここに貼り付けてください
>2)そのマクロは、どこに記述しましたか

そのマクロはうまくいかず、削除してしまっているのですが、
マクロの記録の印刷から、編集で書き足していました。
その時に、セル番地が指定された記述になってしまったように思いました。


>3)印刷範囲(ジャンプ先)は、複数シートにあるのか
>  それとも1つのシート内に複数箇所なのでしょうか

シートは複数ありますが、
ジャンプ元とジャンプ先はそれぞれ同一シートの中に複数個所あります。
・ツリー全体表示

【81444】Re:ジャンプ先を印刷範囲に設定→印刷 ...
発言  マナ  - 20/8/5(水) 20:56 -

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

>何か間違えたようで、同じページばかり印刷されてしまったので

1)そのマクロをここに貼り付けてください
2)そのマクロは、どこに記述しましたか
3)印刷範囲(ジャンプ先)は、複数シートにあるのか
  それとも1つのシート内に複数箇所なのでしょうか


 
・ツリー全体表示

【81443】Re:ジャンプ先を印刷範囲に設定→印刷 ...
質問  初心者  - 20/8/5(水) 11:35 -

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

ありがとうございます。

>>そうすると、名前の定義された1番のセル範囲(出力したい領収書の範囲)にジャンプします。
>
>ここは、ハイパーリンク関数でしょうか??

そうです。ここはハイパーリンクの関数です。


>印刷範囲に設定する必要があるのでしょうか?
>単に、選択範囲を印刷というマクロではだめなのでしょうか。

設定しなくてもそのまま印刷が出来ればそれでいいです。
何か間違えたようで、同じページばかり印刷されてしまったので
都度設定する必要があるのかな、と思ったんです。

引き続きよろしくお願いいたします。
・ツリー全体表示

【81442】Re:ジャンプ先を印刷範囲に設定→印刷 ...
発言  マナ  - 20/8/3(月) 19:04 -

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

>そうすると、名前の定義された1番のセル範囲(出力したい領収書の範囲)にジャンプします。

ここは、ハイパーリンク関数でしょうか??


>氏名をクリックしてジャンプするところまでは目で確認したいため手動でいいのですが、その部分を印刷範囲に設定して印刷する。

印刷範囲に設定する必要があるのでしょうか?
単に、選択範囲を印刷というマクロではだめなのでしょうか。
・ツリー全体表示

【81441】Re:XMLの名前空間を親ノードで指定すると...
お礼  あも  - 20/8/3(月) 16:44 -

引用なし
パスワード
   ▼γ さん:
そういった仕様ということでことで、納得いたしました。
また、質問掲示板に関するアドバイスもありがとうございます。
・ツリー全体表示

【81440】ジャンプ先を印刷範囲に設定→印刷 のマ...
質問  初心者  - 20/8/3(月) 11:04 -

引用なし
パスワード
   初心者です。よろしくお願い致します。Excelで作成した領収書になります。
【現状】
それぞれの領収書シートに

1行目 1番の氏名 領収日
2行目 2番の氏名 領収日 と、シートによってこの人数は違いますが

例えば、2番の氏名の横の領収日を見て、日付が入っていたら氏名をクリックします。
そうすると、名前の定義された1番のセル範囲(出力したい領収書の範囲)にジャンプします。

ここで、印刷範囲に設定して印刷するところを手作業でやっています。

【希望】
氏名をクリックしてジャンプするところまでは目で確認したいため手動でいいのですが、その部分を印刷範囲に設定して印刷する。また別の氏名をクリックしたら、そこに飛んで印刷する、という作業をボタンで完結させたいと思っています。

ネットからのコピペでいろいろ試してみたのですが、なかなかうまくいかず、
ご相談させていただきました。

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

【81439】Re:間違いを色であらわすことはできます...
お礼  moro  - 20/8/2(日) 20:08 -

引用なし
パスワード
   ▼γ さん:
数字で試してみたところきちんと動作しました。
修正ありがとうございました。またいろいろ教えて
いただきありがとうございました。


>すべて数値のケースは考慮していませんでした。
>下記の修正を行って、
>書込先のシートの書式を「文字列」にしておけばよいと思います。
>
>Sub main()の
>  '書き込み先のシートをクリアー
>  ws2.UsedRange.Clear
>の下に一行を挿入してください。  
>  ws2.Columns("A:B").NumberFormatLocal = "@"
>
>■なお、相違箇所というものは、ユニークに決まるものではないことに注意が必要です。
>
>どこを共通した箇所と考えるかには、もともと任意性があります。
>例えば、
>ABCBDAB と BDCABA といった比較を考えると、
>(1)
>BCBAが共通部分と考えて、
>ABCBDAB と BDCABA
>~  ~ ~   ~ ~
>が相違点と考えることもできますし、
>(2)
>BDABが共通部分と考えて
>ABCBDAB と BDCABA
>~~~      ~ ~
>が相違点と考えることもできます。
>これらを網羅的に考えるのは別の話になると思います。
>
>■
>現状のもので不都合があれば、ご自分で改善されるか、
>フリーなツールを探されてはいかがでしょうか。
・ツリー全体表示

【81438】Re:間違いを色であらわすことはできます...
回答  γ  - 20/8/2(日) 9:40 -

引用なし
パスワード
   すべて数値のケースは考慮していませんでした。
下記の修正を行って、
書込先のシートの書式を「文字列」にしておけばよいと思います。

Sub main()の
  '書き込み先のシートをクリアー
  ws2.UsedRange.Clear
の下に一行を挿入してください。  
  ws2.Columns("A:B").NumberFormatLocal = "@"

■なお、相違箇所というものは、ユニークに決まるものではないことに注意が必要です。

どこを共通した箇所と考えるかには、もともと任意性があります。
例えば、
ABCBDAB と BDCABA といった比較を考えると、
(1)
BCBAが共通部分と考えて、
ABCBDAB と BDCABA
~  ~ ~   ~ ~
が相違点と考えることもできますし、
(2)
BDABが共通部分と考えて
ABCBDAB と BDCABA
~~~      ~ ~
が相違点と考えることもできます。
これらを網羅的に考えるのは別の話になると思います。


現状のもので不都合があれば、ご自分で改善されるか、
フリーなツールを探されてはいかがでしょうか。
・ツリー全体表示

【81437】Re:間違いを色であらわすことはできます...
回答  moro  - 20/8/1(土) 21:46 -

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

すみません郵便番号や電話番号は大丈夫でしたが

413412 413411 などの数字で試してみたところ数字のみはダメでした。


>>例 〒140-2415 〒142-2315 → 2と3が赤字
>
>失礼ながら、実際に動作させてみたうえでのコメントですか?
>文字列の種類に特段の制限は設けていません。
・ツリー全体表示

【81436】Re:XMLの名前空間を親ノードで指定すると...
発言  γ  - 20/8/1(土) 14:02 -

引用なし
パスワード
   creatNodeは引数にnamespace文字列を必須としていて、
親に <>""のnamespace文字列を指定していたら、
その子に指定したnamespace文字列が、
""であるかどうかに拘わらず出力するというのが仕様なのでしょう。
名前空間を使うなら統一して使う、
ということを暗黙の了解にしているので、それはそれで納得的です。

私も詳細なことを知らないので、別の方法があるのかもしれませんが。

以下、余談:

ここは、ExcelVBAの質問掲示板なので、
この種のテーマを質問するなら、
より広い範囲のテーマも同時に扱う質問掲示板で質問されたほうが
IT実務家の目にも触れ、回答を得られる可能性は高まります。

なにぶん、こちらのサイトは、今や、流量も少ないですし、
管理人さんのメンテナンスも十分されていない印象です。
(URLが変更になっても、その対応がなされず、
 投稿のたびに古いurlを使って再表示してしまい、
 エラーが常に起きます。
 リンクも古いものがリンク切れのまま放置されていますし、
 早晩、収束していくのかなあと、いささか残念に思っています。)
・ツリー全体表示

【81435】Re:表の比較
お礼  T&#8211;K  - 20/8/1(土) 12:29 -

引用なし
パスワード
   送信ありがとうごさいます、
このプラグラムの内容が最初理解できず、
試行錯誤していたため、返信送れました。 
申し訳ありません。
mach関数の処理自体照合処理をして
値を配列に格納していると思いこんでいました。
dictionaryの場合、このような表現も
できるのかなと思いましたが、


配列ではindex番号でしか表現する方法
を知らないためw(my.mx)が?となっていました。
マッチ関数の結果が位置を出すものと知ってからは
処理の意味がわかりました。勉強不足ということです。
とりあえす利用ささて頂き高速になりました
感謝いたします。
・ツリー全体表示

【81434】Re:表の比較
発言  マナ  - 20/7/30(木) 20:20 -

引用なし
パスワード
   ▼T-K さん:

>Dictionaryを使ってのコード提示ありがとうございます。

どちらかというと配列のコードのつもりだったのですが…


Sub test3()
  Dim fSh As Worksheet
  Dim tSh As Worksheet
  Dim tbl As Range
  Dim i As Long, k As Long
  Dim dt As Double
  Dim com As String
  Dim mX, mY
  Dim w
  Dim flg As Boolean

  Set fSh = Sheets("Sheet1")
  Set tSh = Sheets("Sheet2")

  fSh.Cells.Interior.ColorIndex = xlNone
 
  Set tbl = tSh.Range("A1").CurrentRegion
  w = tbl.Value

  With fSh.Range("A1").CurrentRegion
    For i = 2 To .Rows.Count
      com = .Cells(i, "B").Value
      mY = Application.Match(com, tbl.Columns("B"), 0)
      If IsError(mY) Then
        .Rows(i).Interior.ColorIndex = 3
      Else
        For k = 3 To .Columns.Count
          dt = .Cells(1, k).Value2
          mX = Application.Match(dt, tbl.Rows(1), 0)
          If IsError(mX) Then
            If Not flg Then .Columns(k).Interior.ColorIndex = 3
          Else
            w(mY, mX) = .Cells(i, k).Value
          End If
        Next
        flg = True
      End If
    Next
  End With
 
  tbl.Value = w

End Sub
・ツリー全体表示

【81433】Re:表の比較
発言  マナ  - 20/7/30(木) 19:30 -

引用なし
パスワード
   ▼T-K さん:

>今回の目的は質問にかいたように配列を理解することと、

配列を使った一括書き込みを理解するには、
最初にも書きましたが、もっと単純な例がよいです。

www.vbalab.sakura.ne.jp/vbaqa/c-board.cgi?cmd=ntr;tree=81369;id=excel

例えば、↑これは理解できていますか。
・ツリー全体表示

【81432】XMLの名前空間を親ノードで指定すると、...
質問  あも  - 20/7/30(木) 18:37 -

引用なし
パスワード
   XMLの名前空間を親ノードで指定すると、子ノードにxmlns=""と自動的に入力されてしまいます。
testノードにはxmlns=""を出力させたくないのですが、方法はありますか?

□出力結果
<root xmlns="aaa.co.jp>
 <test xmlns=""/>
</root>

□理想の結果
<root xmlns="aaa.co.jp">
 <test/>
</root>

□現在のコード
Sub Samples()
Dim xmlDoc As MSXML2.DOMDocument60
Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言
Dim rootelement As MSXML2.IXMLDOMElement
Dim element As MSXML2.IXMLDOMElement


'XMLドキュメント作成
Set xmlDoc = Nothing
Set xmlDoc = New MSXML2.DOMDocument60
'XML宣言
Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8"""))

Set rootelement = xmlDoc.createElement("root")
xmlDoc.appendChild rootelement
Set attr = xmlDoc.createNode(2, "xmlns", "")
attr.Text = "aaa.co.jp"
rootelement.setAttributeNode attr

Set element = rootelement.appendChild(xmlDoc.createNode(NODE_ELEMENT, "test", ""))

xmlDoc.Save ("namespace.xml")
End Sub
・ツリー全体表示

【81431】Re:間違いを色であらわすことはできます...
回答  γ  - 20/7/30(木) 8:00 -

引用なし
パスワード
   >例 〒140-2415 〒142-2315 → 2と3が赤字

失礼ながら、実際に動作させてみたうえでのコメントですか?
文字列の種類に特段の制限は設けていません。
・ツリー全体表示

【81430】Re:複数の値からある合計に一致するすべ...
発言  γ  - 20/7/29(水) 23:51 -

引用なし
パスワード
   参考サイトの記事のなかでも紹介されていますが、
hatenaさん作成になるこちらの記事が参考になると思います。
 ht tps://hatenachips.blog.fc2.com/blog-entry-430.html

アルゴリズムの説明のほか、実際に動作するxlsmファイルも
提供されていますので、試行することができます。
・ツリー全体表示

【81429】Re:表の比較
発言  T-K  - 20/7/29(水) 23:31 -

引用なし
パスワード
   返信ありがとうございます
Dictionaryを使ってのコード提示ありがとうございます。
シートに一度に書き込んでいるのは、コードをみて何となく理解できるのですが、
自分で応用ができないのが現状です。
いままでなら、このコードを少し変更して利用していますが、
今回の目的は質問にかいたように配列を理解することと、配列でDictionaryと同じ 表現ができるのかが課題です。
あと自分で作った物も無駄にしたくないため、どこを直せばいいのかを知りたいです


配列でもテーブル範囲を指定すれば一括で記入は可能なようですが、
Splitで区切った物を配列に入れたため複雑な構造になっていてうまくいきません

作っても”型が合いません”&"インデックスが有効範囲にありません"とエラーがでてしまっています。
もしわかるようであればおしえてください
よろしくお願いします。
・ツリー全体表示

【81428】Re:複数の値からある合計に一致するすべ...
発言  マナ  - 20/7/29(水) 20:10 -

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

>確かに最終回答者様のコードで試してみると、結果は出るのですが
>「max=19」であれば問題なしでした。
>ですが使いたい数字は0〜36までなのです。
>試しに「max=20」で回答が表示されるまでに5分。
>「max=25」だと30分待っても答えが出ませんでした(カーソルがくるくる状態)
>組み合わせが多くなるからでしょうか?


そうだと思います。

>であれば、もっと簡単な方法はないものでしょうか?

現在の方法は、総当たりなので効率は悪そうですが
何となくしか、理解できていないので
わたしには、わかりません。

海外サイトも含めて、検索してみては、どうでしょうか。
・ツリー全体表示

【81426】Re:複数の値からある合計に一致するすべ...
質問  ゆきぼ  - 20/7/29(水) 13:15 -

引用なし
パスワード
   ▼マナ さん:
>▼ゆきぼ さん:
>
>>こちらのサイトは私も参考にして試してみたのですが
>>動かないか、思うような答えが出ないかのどちらかでした。
>>
>
>わたしが試したのは、最後の回答者のコードだけですが
>期待通りの結果になりましたが…

検証ありがとうございます。
確かに最終回答者様のコードで試してみると、結果は出るのですが
「max=19」であれば問題なしでした。
ですが使いたい数字は0〜36までなのです。
試しに「max=20」で回答が表示されるまでに5分。
「max=25」だと30分待っても答えが出ませんでした(カーソルがくるくる状態)
組み合わせが多くなるからでしょうか?
であれば、もっと簡単な方法はないものでしょうか?
・ツリー全体表示

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