Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7全般 : Excel 2010)
セルに出る###を修正して元の値を表示させたい
投稿日時: 17/12/01 15:21:43
投稿者: 1234567890

一見簡単なことのようですが、調べても調べても解消方法が出てこないので、こちらで質問させていただきます。
 
よくExcelのセルの中に出てくる###という表示は、VBAでどのようなコードを書いたら元のセルの値がきちんと表示されるのでしょうか?
 
しばらくネットで検索しても、解決方法が全くといっていいほど出てこなかったので途方にくれています。
(初めてのケースなので対処方法が分からないです。)

回答
投稿日時: 17/12/01 15:34:02
投稿者: sk

引用:
よくExcelのセルの中に出てくる###という表示は、
VBAでどのようなコードを書いたら元のセルの値がきちんと表示されるのでしょうか?

その原因が何であるか次第。
 
121ware.com より:
http://121ware.com/qasearch/1007/app/servlet/qadoc?QID=016744
 
例えば、セルの値の長さに対して列の幅が狭すぎるだけなら、
単にそのセルを含む列の幅を広げるコード
( AutoFit メソッドなど)を実行なさればよろしいでしょう。

回答
投稿日時: 17/12/03 10:23:37
投稿者: mattuwan44

こういう場合は、掲示板で聞くより、
「エクセル # 表示される」
というようなキーワードでネットで検索したほうが、
いつ回答がつくかわからない掲示板より解決が速いです。
また、検索が上手にできるようになることが、
VBAの勉強にも非常に役に立ちます。
VBAの情報はネット上に非常に豊富なので、
中級者も上級者も上手に情報を集めておられます。
また、回答に際しても、調べてみることで、回答者も勉強して、
回答することも多々あります。

回答
投稿日時: 17/12/04 07:48:02
投稿者: 細雪

1234567890 さんの引用:
一見簡単なことのようですが、調べても調べても解消方法が出てこない(略)
(初めてのケースなので対処方法が分からないです。)

 
セルにお名前の数字10ケタでも入れて列幅を狭めてみると再現できますよ。
列幅に数値が収まらないときに普通に出てくる表示ですが、見たことないですか?
つまり、列幅を拡げてやれば普通に解消できます。
 
通常時(VBAを使わないとき)にそうなったら
どのように対処なさるのでしょう?
列表示の間をダブルクリックして列幅を「自動調整」したことないですか?
それを「マクロの記録」してやれば解決では?
 
まずは
   Columns("列").AutoFit
あたりを試してみるとか。
 
 
 
日時がマイナスなら、根本的に見直しが必要かもですね。

投稿日時: 17/12/04 14:39:57
投稿者: 1234567890

細雪 さんの引用:
1234567890 さんの引用:
一見簡単なことのようですが、調べても調べても解消方法が出てこない(略)
(初めてのケースなので対処方法が分からないです。)

 
セルにお名前の数字10ケタでも入れて列幅を狭めてみると再現できますよ。
列幅に数値が収まらないときに普通に出てくる表示ですが、見たことないですか?
つまり、列幅を拡げてやれば普通に解消できます。
 
通常時(VBAを使わないとき)にそうなったら
どのように対処なさるのでしょう?
列表示の間をダブルクリックして列幅を「自動調整」したことないですか?
それを「マクロの記録」してやれば解決では?
 
まずは
   Columns("列").AutoFit
あたりを試してみるとか。
 
日時がマイナスなら、根本的に見直しが必要かもですね。

 
 
私の名前のような長い文字列をセルに入れると###表示になり、列幅を広げると解消できるのは
知ってます。
さきほど、この作業のマクロを記録してVBAを実行しましたが、表示は変わらずです。
AutoFit(Rows, Columnsそれぞれ)も試してみたのですが、変わらずでした。
マイナスになっている日時はないです。

投稿日時: 17/12/04 14:58:07
投稿者: 1234567890

sk さんの引用:
引用:
よくExcelのセルの中に出てくる###という表示は、
VBAでどのようなコードを書いたら元のセルの値がきちんと表示されるのでしょうか?

その原因が何であるか次第。
 
121ware.com より:
http://121ware.com/qasearch/1007/app/servlet/qadoc?QID=016744
 
例えば、セルの値の長さに対して列の幅が狭すぎるだけなら、
単にそのセルを含む列の幅を広げるコード
( AutoFit メソッドなど)を実行なさればよろしいでしょう。

 
skさん
さきほど、Rows/ColumnsともにAutoFitをかけましたが、結果変わらずでした。
(ちなみに原因は、セルの長さに対して列の幅が狭すぎる、です。)
AutoFitとセル広げのマクロ登録以外だと、どんな解決法があるのでしょうか?

回答
投稿日時: 17/12/04 15:14:53
投稿者: sk

引用:
さきほど、Rows/ColumnsともにAutoFitをかけましたが、結果変わらずでした。
(ちなみに原因は、セルの長さに対して列の幅が狭すぎる、です。)

( VBA のコードではなく)手動でその列の幅を拡げたら
セルの値が正常に表示されることが確認出来た、ということでしょうか。
 
もしそうなら、実際に記述された VBA のコードに
問題があるのだと思われます。
(例えば AutoFit メソッドの対象となる列範囲の指定など)
 
また、### で表示されるセルが、2 つ以上の列にまたがる
結合セルである場合は AutoFit メソッドによる
列の自動調整は行なわれません。
その場合は、各々の列の幅( ColumnWidth プロパティ)を
明示的に指定して拡げる必要があるでしょう。

回答
投稿日時: 17/12/04 15:21:47
投稿者: もこな2

みなさん適切なツッコミをされてますけど、とりあえず、コードのことは一旦おいておいて、「マクロの記録」をしながら手動でやってみて、どんなコードができあがるか見てみましょう。
  
そして、そのコードがどんな動きをしているのか、対象としているオブジェクト、メソッドに注目してみましょう

回答
投稿日時: 17/12/04 15:38:20
投稿者: sk

追記:

引用:
AutoFitとセル広げのマクロ登録以外だと、どんな解決法があるのでしょうか?

例えば、そのセルのフォントサイズが(極端に)小さくなったり、
(同じ列内の)セルのフォントサイズが統一されていなくても構わない、
ということであれば、そのセルの[縮小して全体を表示する]プロパティを
あらかじめ有効にしておく、という代替策もあるでしょう。
 
ただ Excel の仕様上、画面表示では正常に表示されていても、
プレビュー結果や印刷結果では ### 表示になっている
ということが割とありますので、基本的には
「各列の幅を(自動調整した結果よりも)少し広めに設定しておく」
ことが推奨されます。
 
MS サポート より:
https://support.microsoft.com/ja-jp/help/400271
https://support.microsoft.com/ja-jp/help/2997538

投稿日時: 17/12/04 16:26:33
投稿者: 1234567890

mattuwan44 さんの引用:
こういう場合は、掲示板で聞くより、
「エクセル # 表示される」
というようなキーワードでネットで検索したほうが、
いつ回答がつくかわからない掲示板より解決が速いです。
また、検索が上手にできるようになることが、
VBAの勉強にも非常に役に立ちます。
VBAの情報はネット上に非常に豊富なので、
中級者も上級者も上手に情報を集めておられます。
また、回答に際しても、調べてみることで、回答者も勉強して、
回答することも多々あります。

 
自分は適切な検索ワードを思い浮かべるのをまだ苦手としており、今後の課題です。
特にこのような技術的なものの場合、どのようにしたらどんぴしゃで欲しい情報がすぐに手に入るように
なるのでしょうか?

投稿日時: 17/12/04 16:39:03
投稿者: 1234567890

sk さんの引用:
引用:
さきほど、Rows/ColumnsともにAutoFitをかけましたが、結果変わらずでした。
(ちなみに原因は、セルの長さに対して列の幅が狭すぎる、です。)

( VBA のコードではなく)手動でその列の幅を拡げたら
セルの値が正常に表示されることが確認出来た、ということでしょうか。
もしそうなら、実際に記述された VBA のコードに
問題があるのだと思われます。
(例えば AutoFit メソッドの対象となる列範囲の指定など)
→はい、VBAのコードでなく、手動で該当の列の幅を広げたらセルの値が正常に表示されました。
やはりVBAのコードがまずいのですね。
 
また、### で表示されるセルが、2 つ以上の列にまたがる
結合セルである場合は AutoFit メソッドによる
列の自動調整は行なわれません。
その場合は、各々の列の幅( ColumnWidth プロパティ)を
明示的に指定して拡げる必要があるでしょう。

→セル結合は行っていないです。ColumnWidthプロパティも試してみましたが
ダメでした。
全体の仕様としては、Excelシートに行列それぞれデータが入っており、行数は10行ほどあります。
列数も10行ほどです。
ここでいくつかのセルに長い文字列があり、そのままだと###表示になるため、これをVBAで何とか自動的にセル幅を広げて通常の表示にできないか、という流れになります。
 

投稿日時: 17/12/04 16:42:49
投稿者: 1234567890

もこな2 さんの引用:
みなさん適切なツッコミをされてますけど、とりあえず、コードのことは一旦おいておいて、「マクロの記録」をしながら手動でやってみて、どんなコードができあがるか見てみましょう。
  
そして、そのコードがどんな動きをしているのか、対象としているオブジェクト、メソッドに注目してみましょう

 
マクロの記録を行ってそこに出力されたコード(ColumnWidthプロパティ)を使ってみましたが、結果は同じでした。
以前同じような現象が起こったときはAutoFitでうまくいったのですが、今回はなぜAutoFitをしても###のままなのか
原因が思い浮かばないです。

投稿日時: 17/12/04 16:46:05
投稿者: 1234567890

sk さんの引用:
追記:
引用:
AutoFitとセル広げのマクロ登録以外だと、どんな解決法があるのでしょうか?

例えば、そのセルのフォントサイズが(極端に)小さくなったり、
(同じ列内の)セルのフォントサイズが統一されていなくても構わない、
ということであれば、そのセルの[縮小して全体を表示する]プロパティを
あらかじめ有効にしておく、という代替策もあるでしょう。
 
ただ Excel の仕様上、画面表示では正常に表示されていても、
プレビュー結果や印刷結果では ### 表示になっている
ということが割とありますので、基本的には
「各列の幅を(自動調整した結果よりも)少し広めに設定しておく」
ことが推奨されます。
 
MS サポート より:
https://support.microsoft.com/ja-jp/help/400271
https://support.microsoft.com/ja-jp/help/2997538

 
どのメソッドを試してみても結果が同じ場合は、最終手段としてこちらの方法を試してみます。
理想としてはVBAで自動化する ですが、それが難しい場合はあらかじめこちらで広めの初期値を設定したほうが早そうですね。

回答
投稿日時: 17/12/04 17:10:59
投稿者: sk

引用:
やはりVBAのコードがまずいのですね。

実際に記述されたコードが未だ示されていませんので、
現時点ではあくまで推測の域を出てはいません。
 
引用:
ColumnWidthプロパティも試してみましたが
ダメでした。

同上。
 
引用:
セル結合は行っていないです。

引用:
いくつかのセルに長い文字列があり、そのままだと###表示になる

その「長い文字列」とは具体的にどのような文字列なのでしょうか。
 
また、そのセルの書式は、具体的にどのように
設定されているのでしょうか。
 
引用:
マイナスになっている日時はないです。

例えば、「日付/時刻データの有効範囲を超えるほど大きな数値」が
格納されているセルの書式として「日付」や「時刻」
(に相当するカスタム書式)を指定していれば、
同様の結果にはなりますが。

回答
投稿日時: 17/12/04 18:29:15
投稿者: もこな2

1234567890 さんの引用:
マクロの記録を行ってそこに出力されたコード(ColumnWidthプロパティ)を使ってみましたが、結果は同じでした。
以前同じような現象が起こったときはAutoFitでうまくいったのですが、今回はなぜAutoFitをしても###のままなのか
原因が思い浮かばないです。
すみません。ちょっと言葉がたりなかったですね。
手動で成功する方法をやってみてどんな記録がされるか見てみましょう。って意味です。
手動でやってみて失敗する例をマクロで再現しても意味がありません。
 
直接リンクURL貼っていいのかわからなかったので
大手検索サイトで「Excel シャープ」っていれると、お困りのような状況の原因と解決策について説明されているサイトが見つかるかとおもうので、手動でこれらをやってみて、うまくいくのであれば、コードの記録をして、中身を見てみましょう。

回答
投稿日時: 17/12/05 13:52:40
投稿者: もこな2

あれは、「シャープ」ではないらしい・・・・
###表示かどうかを判定する
http://www.moug.net/tech/exvba/0050152.html

回答
投稿日時: 17/12/05 17:39:25
投稿者: mattuwan44

引用:
→セル結合は行っていないです。ColumnWidthプロパティも試してみましたが
ダメでした。
全体の仕様としては、Excelシートに行列それぞれデータが入っており、行数は10行ほどあります。
列数も10行ほどです。
ここでいくつかのセルに長い文字列があり、そのままだと###表示になるため、これをVBAで何とか自動的にセル幅を広げて通常の表示にできないか、という流れになります。

 
どうせ他人を巻き込んで大騒ぎしなければならないのだから、
ちゃんと回答側でも再現できるよう説明してみませんか?
VBAでどうのこうのの前に、「エクセルの癖」を把握すべきです。
所詮マクロは、単に操作を自動実行させる文章なのですから。。。
みんなで考えてたらなにかいい案が出てきそうです^^
 
詳しい人が知っている。という前提ではなく、
「三人よれば・・・」といいます。
なにかいいアイデアが無いか(思いつかないか)、
アドバイスを求めたらいいと思います。
それには、いつでもとこでも「再現出来る」ことが肝心です。
 

投稿日時: 17/12/06 09:30:11
投稿者: 1234567890

mattuwan44 さんの引用:
引用:
→セル結合は行っていないです。ColumnWidthプロパティも試してみましたが
ダメでした。
全体の仕様としては、Excelシートに行列それぞれデータが入っており、行数は10行ほどあります。
列数も10行ほどです。
ここでいくつかのセルに長い文字列があり、そのままだと###表示になるため、これをVBAで何とか自動的にセル幅を広げて通常の表示にできないか、という流れになります。

 
どうせ他人を巻き込んで大騒ぎしなければならないのだから、
ちゃんと回答側でも再現できるよう説明してみませんか?
VBAでどうのこうのの前に、「エクセルの癖」を把握すべきです。
所詮マクロは、単に操作を自動実行させる文章なのですから。。。
みんなで考えてたらなにかいい案が出てきそうです^^
 
詳しい人が知っている。という前提ではなく、
「三人よれば・・・」といいます。
なにかいいアイデアが無いか(思いつかないか)、
アドバイスを求めたらいいと思います。
 
それには、いつでもとこでも「再現出来る」ことが肝心です。
 

 
他人を巻き込もうなんてこっちは考えてません、ましてや巻き込みたいとは一ミリも思ってません。
単に分からないから、そばに頼れる人がいないから聞いてるんです。誤解を招くような文章を書かないでください。
 
回答を再現できるほどの頭じゃないんで、すぐにはできないです。
私は数学とかの問題解決が昔から大の苦手で、記憶力くらいしか特技がありません。

投稿日時: 17/12/06 10:44:24
投稿者: 1234567890

sk さんの引用:
引用:
やはりVBAのコードがまずいのですね。

実際に記述されたコードが未だ示されていませんので、
現時点ではあくまで推測の域を出てはいません。
 
引用:
ColumnWidthプロパティも試してみましたが
ダメでした。

同上。
 
引用:
セル結合は行っていないです。

引用:
いくつかのセルに長い文字列があり、そのままだと###表示になる

その「長い文字列」とは具体的にどのような文字列なのでしょうか。
→文字列はすべて、2017/12/1というような表示になります。
 
また、そのセルの書式は、具体的にどのように
設定されているのでしょうか。
→セルの書式はDateになっています。
 
引用:
マイナスになっている日時はないです。

例えば、「日付/時刻データの有効範囲を超えるほど大きな数値」が
格納されているセルの書式として「日付」や「時刻」
(に相当するカスタム書式)を指定していれば、
同様の結果にはなりますが。

→となると、書式設定でDateとしているため、文字列が長いと###となるのですね。
 
オリジナルのコードは、以下のようになります。
 
Public Sub Copy_Paste()
 
Dim shsOld As Sheets
     Dim ws As Worksheet
     Dim wsNew As Worksheet
     Dim ixRow As Long
 
     With ThisWorkbook.Worksheets
         'コピー元定義
        Set shsOld = .Item(Array("Sheet ABC"))
         'コピー先定義
        Set wsNew = .Add(after:=.Item(.Count))
     End With
     '貼付先行番号初期化
    ixRow = 1
     '繰り返す
    For Each ws In shsOld
         'シートの使用しているセル範囲に対して
        With ws.UsedRange
             '操作対象のシートのC:Rをコピーし、新しいシートへ貼付
            Intersect(.Cells, ws.Range("C:R")).Copy wsNew.Cells(ixRow, "A")
             '次の貼付先行番号を用意
            ixRow = ixRow + .Rows.Count
         End With
     Next
     
End Sub
 

回答
投稿日時: 17/12/06 11:09:19
投稿者: もこな2

横から口を出すような形になってしまいますし、揚げ足取りみたいにもなってしましますが、ちょっと冷静になってコメントを読まれた方が良いかとおもいます。
 
>他人を巻き込もうなんてこっちは考えてません、ましてや巻き込みたいとは一ミリも思ってません。
>単に分からないから、そばに頼れる人がいないから聞いてるんです。
 
対応されてる回答者さんからすれば、聞かれる=巻き込まれてる だとおもいます。(少なくとも私はそう思います)
 
皆さん言いたいことは、
VBA(Visual Basic for Applications)って所詮「for Applications」ですから、アプリケーションできないことは、いくらがんばってコード書いてもできませんよってことですよね(たぶん)
 
ですから、コードうんぬんっていうよりも、まず1つのセルについて手動でできる方法を見つけて(=Excelでほんとにそのような処理ができるのかを調べて)から、どのようなコードを書けばよいかを考えて(調べて)、それを複数に処理できる方法を考えて(調べて)目的(複数を処理するコード)にたどり着くっていう方法が結局のところ王道にして近道なんだと思います。
 
そこを否定して、手動でやる方法も調べません。与えられたコードがどんな動きをするか理解しないまま動かして(理解されてるのかもしれませんが、本スレ含めて、そのような発言がないので・・)、さらに調べる方法もわからないので、思いつくコードを片っ端から教えてくださいとも取れるような発言ですと、答える方からすると教える義務もないしもういいやってなってしまいます。
 
少なくとも、この掲示板にたどり着いたということは、学ぼうっていう気持ちはお持ちだと思いますし、ネット検索ができる状況と理解しますので、もう一度入り口に立って(手動でどのようにすれば解決できるかを調べる)考えることをオススメします。
 
なお、17/12/06 10:44:24投稿のコードはスレ間違いでしょうか?
本スレッドのセルの値が###と出てしまうことと関連が無いようにおもわれます。
 
このほか、ご質問とはまったく関係ないですが、この掲示板は引用部分が折りたためないので、必要ない引用は避けた方が見やすいです(超個人的意見かもしれませんが。。。。)
 
 

回答
投稿日時: 17/12/06 12:31:35
投稿者: eden

これですかね。書式設定を文字列から標準に変更してみてください。
 
Excel のセルの書式設定の表示形式が [文字列] の場合、セルに 256 文字以上の
文字を入力すると "##### (シャープ)" が表示される
https://support.microsoft.com/ja-jp/help/410234
 
 
 

投稿日時: 17/12/06 14:03:17
投稿者: 1234567890

もこな2 さんの引用:
横から口を出すような形になってしまいますし、揚げ足取りみたいにもなってしましますが、ちょっと冷静になってコメントを読まれた方が良いかとおもいます。
 
>他人を巻き込もうなんてこっちは考えてません、ましてや巻き込みたいとは一ミリも思ってません。
>単に分からないから、そばに頼れる人がいないから聞いてるんです。
 
対応されてる回答者さんからすれば、聞かれる=巻き込まれてる だとおもいます。(少なくとも私はそう思います)
→うーん、たぶん日本人の間では、質問することは巻き込まれる、迷惑、さらには悪となってるんでしょうかね・・・。トピックずれですが、私は欧米とのハーフで、私の父の国では分からなければとにかく周囲に聞け!というのが常識でした。なのでここでも色々質問しているのです。
 
皆さん言いたいことは、
VBA(Visual Basic for Applications)って所詮「for Applications」ですから、アプリケーションできないことは、いくらがんばってコード書いてもできませんよってことですよね(たぶん)
 
ですから、コードうんぬんっていうよりも、まず1つのセルについて手動でできる方法を見つけて(=Excelでほんとにそのような処理ができるのかを調べて)から、どのようなコードを書けばよいかを考えて(調べて)、それを複数に処理できる方法を考えて(調べて)目的(複数を処理するコード)にたどり着くっていう方法が結局のところ王道にして近道なんだと思います。
→そこが最大の難点です。私の場合、特に単純に調べる作業だけで最低2時間はかかってしまいます。それだけ時間をかけてもぜんぜん答えが見つからないときもあります。もうずっとこの繰り返しで、正直VBAは挫折しそうです。
 
そこを否定して、手動でやる方法も調べません。与えられたコードがどんな動きをするか理解しないまま動かして(理解されてるのかもしれませんが、本スレ含めて、そのような発言がないので・・)、さらに調べる方法もわからないので、思いつくコードを片っ端から教えてくださいとも取れるような発言ですと、答える方からすると教える義務もないしもういいやってなってしまいます。
→ですのでどうせ自分にはコーディングなんて向いてないんですよ。やっぱりこの世界は自分にとっては難しすぎます。早いところ足を洗いなおして、自分の得意な分野でがんばります。
 
少なくとも、この掲示板にたどり着いたということは、学ぼうっていう気持ちはお持ちだと思いますし、ネット検索ができる状況と理解しますので、もう一度入り口に立って(手動でどのようにすれば解決できるかを調べる)考えることをオススメします。
→学ぼうという気持ちはまだ少しだけあるものの、挫折しかかってます。
日本語力やもともとの頭の馬鹿さもあって、今回の件もたぶん完全に分かるまでに半年は要すると思います。
 
なお、17/12/06 10:44:24投稿のコードはスレ間違いでしょうか?
本スレッドのセルの値が###と出てしまうことと関連が無いようにおもわれます。
→本スレッドのコードと関連しています。
前の件で聞くべき内容だったと気づきました。コピペされたシートの文字列がそのまま2017/12/1として反映されないのです。。。

回答
投稿日時: 17/12/06 15:30:34
投稿者: WinArrow
投稿者のウェブサイトに移動

 
一般的には、こんな簡単なことが、なんでこんなに時間をかけているんだ
という感じです。
そこで、
振り出しに戻ってしまい、恐縮ですが、
 
>さきほど、この作業のマクロを記録してVBAを実行しましたが、表示は変わらずです。
>AutoFit(Rows, Columnsそれぞれ)も試してみたのですが、変わらずでした。
 
このコードを全部掲示してみてください。
そして、このセルには、どんなデータが入力されているかも
併せて掲示してみませんか?
 
回答者の環境で再現できるだけの資料を提供しないと
本当の原因はわからないでしょう。

回答
投稿日時: 17/12/06 15:32:09
投稿者: もこな2

引用:
対応されてる回答者さんからすれば、聞かれる=巻き込まれてる だとおもいます。(少なくとも私はそう思います)
→うーん、たぶん日本人の間では、質問することは巻き込まれる、迷惑、さらには悪となってるんでしょうかね・・・。トピックずれですが、私は欧米とのハーフで、私の父の国では分からなければとにかく周囲に聞け!というのが常識でした。なのでここでも色々質問しているのです。
私が日本人代表です。というつもりはありませんが、たぶん「巻き込まれる」っていうニュアンスが違うんでしょうね。私にとっては「巻き込まれる」=「関係する」なので迷惑とか悪は関係ないです。
「とにかく周囲に聞け!」は全くその通りだとおもいます。ほかの回答者さんも言ってますが、ネットの掲示板に質問者が書いたことしか状況がわからない回答者では、実際にどうなってどのように困っているか明確にわからないです。
 
引用:
ですから、コードうんぬんっていうよりも、まず1つのセルについて手動でできる方法を見つけて(=Excelでほんとにそのような処理ができるのかを調べて)から、どのようなコードを書けばよいかを考えて(調べて)、それを複数に処理できる方法を考えて(調べて)目的(複数を処理するコード)にたどり着くっていう方法が結局のところ王道にして近道なんだと思います。
→そこが最大の難点です。私の場合、特に単純に調べる作業だけで最低2時間はかかってしまいます。それだけ時間をかけてもぜんぜん答えが見つからないときもあります。もうずっとこの繰り返しで、正直VBAは挫折しそうです。
繰り返しになりますが、回答者は、お使いのパソコンを直接見ることができないので何を困っているのかわかりません。それよりは隣にいる人に聞いた方がいいです。聞かれた人も知らないのであれば日本語で検索して教えてくれるかもしれません。
 
引用:
そこを否定して、手動でやる方法も調べません。与えられたコードがどんな動きをするか理解しないまま動かして(理解されてるのかもしれませんが、本スレ含めて、そのような発言がないので・・)、さらに調べる方法もわからないので、思いつくコードを片っ端から教えてくださいとも取れるような発言ですと、答える方からすると教える義務もないしもういいやってなってしまいます。
→ですのでどうせ自分にはコーディングなんて向いてないんですよ。やっぱりこの世界は自分にとっては難しすぎます。早いところ足を洗いなおして、自分の得意な分野でがんばります。
仕事として、コーディングをするよう指示がでているのであれば、どこまでやったか、どこがうまくいかないか、どのようにすればうまくいきそうかを上司に説明してみましょう。まずは手動でやる方法を調べたいけど日本語で検索することが苦手ということを説明できれば、検索のサポートをしてくれるメンバーを教えてくれるかもしれませんし、得意分野の仕事をするように指示が変わるかもしれません。
 
引用:
少なくとも、この掲示板にたどり着いたということは、学ぼうっていう気持ちはお持ちだと思いますし、ネット検索ができる状況と理解しますので、もう一度入り口に立って(手動でどのようにすれば解決できるかを調べる)考えることをオススメします。
→学ぼうという気持ちはまだ少しだけあるものの、挫折しかかってます。
日本語力やもともとの頭の馬鹿さもあって、今回の件もたぶん完全に分かるまでに半年は要すると思います。
日本語が苦手だけど、日本語のメニューになっているExceのを操作するっていうのは難しいかもしれませんね。ラッキーなことにExcelは日本以外でも使用されているので、得意な言語で検索してみましょう。
 
引用:
なお、17/12/06 10:44:24投稿のコードはスレ間違いでしょうか?
本スレッドのセルの値が###と出てしまうことと関連が無いようにおもわれます。
→本スレッドのコードと関連しています。
前の件で聞くべき内容だったと気づきました。コピペされたシートの文字列がそのまま2017/12/1として反映されないのです。。。
17/12/06 10:44:24投稿のコード=(前の件)は単純なコピー&ペーストしてるだけで、書式を変更しているわけではないので関係なさそうです。
おそらく、コピー元のシートでは、表示されるように書式が設定されていたか、列幅が広かったのでしょうけど、貼り付けたシートではそうではなかったので、うまくいかなかったということだとおもいます。
ですので、すぐにVBAでなんとかするのではなくて、手動で何とかやる方法を見つけてから、コーディングに取り組んだ方がいいですよ という意味のコメントを付けています。
 
自分は、日本語以外は苦手なのでわかりづらい表現があったらごめんなさい。

回答
投稿日時: 17/12/07 08:25:05
投稿者: mattuwan44

引用:
他人を巻き込もうなんてこっちは考えてません、ましてや巻き込みたいとは一ミリも思ってません。
単に分からないから、そばに頼れる人がいないから聞いてるんです。誤解を招くような文章を書かないでください。
  
回答を再現できるほどの頭じゃないんで、すぐにはできないです。
私は数学とかの問題解決が昔から大の苦手で、記憶力くらいしか特技がありません。

う〜ん。。。ニホンゴムズカシイ。。。。
 
「質問される=他人の問題に巻き込まれる」
だと思いますが、、、少し言葉が乱暴でしたかね。。。
 
そもそも、他人の問題に関わりたいから、回答しているわけで、
巻き込まれることに嫌悪感はまったくないです。ましてや、質問者を卑下しているわけでもないです。
そのことを理解していただけるとありがたいのですが。。。
 
で、そちらで、回答を再現する以前に、
あなたのパソコン上で起こっている事象を、回答者のパソコンで再現できるよう、
説明してください。これは、動作確認できるサンプルデータも含めての話です。
そうしていただかないと、解決をお手伝いしたいと思っても、
その解決策を探ることが出来ません。まずは、そこから始めませんか?
 
引用:
私の場合、特に単純に調べる作業だけで最低2時間はかかってしまいます。それだけ時間をかけてもぜんぜん答えが見つからないときもあります。もうずっとこの繰り返しで、正直VBAは挫折しそうです。

うんうん。よくわかります。
僕も最初は、検索しても解決策が見つからず、
掲示板に質問書いても、なかなか思いが伝わらなくて苦労しました。
質問を書くのに、どう書けば、伝わるのか、その文章の推敲に、3〜4時間かけたこともざらです。
そして、きつい言葉もたくさん、いただきました。
そういった経験があってこそ習得できるものかなぁと今では思います。
 
折角、付き合ってくれる人が居るのだから、上手く付き合って、
必要な情報が得られるようにしたらいいと思いますよ^^

回答
投稿日時: 17/12/07 14:14:20
投稿者: baoo

Googleなどで検索したときに40ページとか見つかるわけです。
1ページ10件ですから400件ということになるわけですが、
個人的なことなのですが、最低限見つかった検索結果の要約くらいはすべて目を通します。
それでも見つからなければキーワードを変えてまた検索します。
調べるのに2時間というのは私には長いとは思えません。
 
実際、仕事でVBAのプログラムを組んでいて問題が解決しないために
何日も調べ続けたなんてのもざらです。
まあ、仕事中は調べるのは保留して個人的に家で調べたりしているわけですけど。
 
 
 
 
 

回答
投稿日時: 17/12/07 14:18:20
投稿者: baoo

書き忘れましたが、調べ続けたり思うように動かなくて苦労するのは
自分にとってはむしろ喜ばしいことです。
これで自分の技術がまた一段上がったと思いますので。
実際、今までの経験で動かなくて苦労したことこそがものすごく身になっています。
簡単にできたものなんてすぐに忘れてしまいますし、
忘れても問題ありません。
どこに答えがあったかは忘れませんけど。

回答
投稿日時: 17/12/11 15:23:51
投稿者: sk

引用:
文字列はすべて、2017/12/1というような表示になります。

引用:
セルの書式はDateになっています。

引用:
となると、書式設定でDateとしているため、文字列が長いと###となるのですね。

この場合は、セルに格納されている数データ(≠数)が
以下のいずれかの数値範囲に含まれているケースが該当します。
 
・セルの値(シリアル値)が 0 未満(負の数値)である。
  ( 1899/12/31 以前の日付を表現できないため)
 
・セルの値(シリアル値)が 2958466 以上の数値である。
  ( 10000/01/01 以降の日付を表現できないため)
 
引用:
オリジナルのコードは、以下のようになります。

引用:
With ws.UsedRange
    '操作対象のシートのC:Rをコピーし、新しいシートへ貼付
    Intersect(.Cells, ws.Range("C:R")).Copy wsNew.Cells(ixRow, "A")
    '次の貼付先行番号を用意
    ixRow = ixRow + .Rows.Count
End With

提示されたコードでは、貼り付け先となっているシートの
各列の幅や各行の高さが全く設定されません。
 
また、仮に AutoFit メソッドを実行してみて
実際に列の幅/行の高さの自動調整が行なわれるか否かは、
それぞれのセルに格納されている値(のデータ型)や
設定されている書式次第です。
(私や eden さんが示した現象を含む)
 
上記のコードの Copy メソッドによる貼り付けの形式は「すべて」、
つまり値だけなく書式ごとセルを貼り付けているわけですから、
コピー元となったセル側の値や書式に左右されてしまうのは
当然でしょう。
 
引用:
VBAのコードでなく、手動で該当の列の幅を広げたらセルの値が正常に表示されました

少なくとも上記のセルに関しては、単純に
「列の幅が足りていない」だけなので、
セルの貼り付けを行なうループ処理を終えた後で、
各列の幅を適宜設定するコードを実行なさればよいはず。
 
引用:
マクロの記録を行ってそこに出力されたコード
(ColumnWidthプロパティ)を使ってみましたが、結果は同じでした。

ならば実際に書かれたコードに何か問題があったのでしょう。
(オリジナルのコードにはそれが含まれていませんが)

回答
投稿日時: 17/12/11 17:00:08
投稿者: mattuwan44

もう、くじけたのかな。。。。
なんで、オートフィットが聞かないか再現できそうにないけど、、、、
以下でどうでしょう?
 

Public Sub Copy_Paste7()
    Dim rngFrom1 As Range
    Dim rngFrom2 As Range
    Dim rngTo As Range
 
    '1つ目のコピー元のセル範囲取得
    Set rngFrom1 = Worksheets("Sheet A").Range("C:R")
    '2つ目のコピー元のセル範囲取得
    With Worksheets("Sheet B").UsedRange
        Set rngFrom2 = Intersect(.Cells, .Offset(1), .Range("B:S"))
    End With
    '貼付先のセル範囲取得
    With Worksheets
        Set rngTo = .Add(after:=.Item(.Count)).Range("A1")
    End With
 
    If MsgBox(rngFrom1.Address(, , , True) & "の範囲をコピーします。", vbYesNo) = vbYes Then
        'コピペ
        rngFrom1.Copy Destination:=rngTo
        'コピペ
        rngFrom2.Copy Destination:=rngTo.Offset(rngTo.CurrentRegion.Rows.Count)
    End If
End Sub

 
元のシートで表示されているなら、
列全体をコピーすることで、列幅もコピーされます。
まずは手動で動作を確認してください。
(つまり、マクロがどうのというより、エクセルの操作の癖が解っているかどうかが肝)
 
 

回答
投稿日時: 17/12/11 17:58:04
投稿者: WinArrow
投稿者のウェブサイトに移動

質問者さんへ
 
現在、不具合が生じているコードを掲示するよう
お願いしたが、・・・・まだだね?
 
AutoFit
の後で
ColumnWidts
を設定していたり
ねんてことないかな?
 
本人は、(先入観で)まともだと思っているかもしれませんが、
他人に添削しておらうのが一番だよ!
 

トピックに返信