[[20200520182651]] 『セルの内容のみずらす』(ゆうか) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルの内容のみずらす』(ゆうか)

こんな機能があるのかな?と知りたいので、エクセルにお詳しい方に教えていただきたく思います。無知なものでおかしい文だったら本当にごめんなさい。

横軸が月曜〜金曜、縦軸が1限〜6限、合計30コマがあります。
この30コマは、それぞれ上下に別れていて、
上に教科(例えば国語)名、下には内容(例えば、物語1)と入力してあります。

授業が思ったより進んだり、進まなかったりした時に、教科の欄はそのままに、内容の欄を前または後ろの教科の欄に自動的に移動する方法はないでしょうか?

申し訳ありませんが、教えて頂けると嬉しいです。

< 使用 Excel:unknown、使用 OS:unknown >


 >この30コマは、それぞれ上下に別れていて、 
 >上に教科(例えば国語)名、下には内容(例えば、物語1)と入力してあります。 
 >内容の欄を前または後ろの教科の欄に自動的に移動する方法はないでしょうか?
  理解不能。表を提示してみてくれ。
(jk) 2020/05/20(水) 20:31

 既存の機能にはありません。

 でも、それ面白いですね。VBAで作ってあげますよ。

 1.具体的なレイアウトを掲示してください。(セル番地が分かるもの)

 2.過去はぐちゃぐちゃになってもいいんですね?
   ※早く進んだら、今日やったことは上書きされて消える
   ※遅くなったら、今日やったことが明日もダブル

 3.遅れた結果、はみ出す30コマ目はどう処置するんですか?
   (来月分がどこかにあって、それらを押し下げる様にするんですか)

(半平太) 2020/05/20(水) 20:35


 数式での案です。
 とりあえず、こんな表を作ります。

	A	B	C	D	E	F	G	H	I	J
1	曜日	限目	教科	内容		国語	数学	科学	歴史	英語
2	月	1限目	国語	物語1		物語1	計算1	物理1	日本史1	文法1
3	月	2限目	数学	計算1		物語2	計算2	物理2	日本史2	文法2
4	月	3限目	科学	物理1		物語3	計算3	物理3	日本史3	文法3
5	月	4限目	歴史	日本史1		物語4	計算4	物理4	日本史4	文法4
6	月	5限目	数学	計算2		物語5	計算5	物理5	日本史5	文法5
7	月	6限目	英語	文法1		物語6	計算6	物理6	日本史6	文法6
8	火	1限目	数学	計算3						
9	火	2限目	英語	文法2						
10	火	3限目	英語	文法3						
11	火	4限目	数学	計算4						
12	火	5限目	歴史	日本史2						
13	火	6限目	国語	物語2	

 この表の1行目は見出しで固定です。
 また、A列とB列も固定です。
 C列には教科の名前を入力してください。

 次に準備として、F2:F7に「国語」という名前を付けます、
 さらに、数学、科学・・・にも同様に名前を付けます。

 D2に、=INDEX(INDIRECT(C2),COUNTIF($C$1:C2,C2))&"" と入力して下にコピーすると、上の表のようになります。

 この表のC列とD列を、ゆうかさんが作った元の表にリンクさせます。

 実際に「内容」の表示をずらすときは、FからJ列の目的のところで、挿入→下にシフト、や
 コピー・ペーストなどで「内容」部分をずらせば、表の部分の「内容」も同時にずれてくれるはずです。

 ただし、各教科の2行目(教科名の直下のセル)で挿入すると名前の範囲そのものが移動してしまうので、
 ここはコピーなどで対応してください。

 もしかしたら、ご期待通りではないかもしれませんが・・・

(tora) 2020/05/20(水) 20:37


jkさん、半平太さん、ご回答本当にありがとうございます!

1. レイアウトお伝えしたいのですが、この掲示板は写真など置かれるのでしょうか?

2. 過去はぐちゃぐちゃになったらだめです。

3..一週間1シートになっていて、次の週のその教科に行くようにしたいです。

toraさん、ご回答ありがとうございます!
もとになるやつを反映するやり方、なるほどと思いました!
やりたいのですが、使っているファイルは学校で使っているもので、国語を何時間したとか計算するやつもついているのですが、使って大丈夫なのでしょうか?

(ゆうか) 2020/05/20(水) 21:02


 >1. レイアウトお伝えしたいのですが、この掲示板は写真など置かれるのでしょうか?
 toraさんが書いたものをコピーして、自分用に作っていただくしかないです。

 >2. 過去はぐちゃぐちゃになったらだめです。 
 あれ、そうなんですか。

 すると、どんな風にズラすのかキチンと説明いただく必要があります。
 漠然としたアイデアだけではプログラムは書けません。

 >3.一週間1シートになっていて、次の週のその教科に行くようにしたいです。 
 一カ月分でワンセットかと思ってました、
 ますます、レイアウトを示していただくのが重要になります。

(半平太) 2020/05/20(水) 21:13


 いろいろやりたいことがあるようですが、いずれも運用次第では可能かとは思いますが、
 現実にどうすればいいかは半平太さんの質問にお答えいただき、半平太さんの回答を待ちましょう。

 前回の回答で、
      ただし、各教科の2行目(教科名の直下のセル)で挿入すると名前の範囲そのものが移動してしまうので、
      ここはコピーなどで対応してください。

 としていましたが、

 次に準備として、F2:F7に「国語」という名前を付けます
                 ↓
                 F1:F7    と変更し、
                ^^^^
 D2に、=INDEX(INDIRECT(C2),COUNTIF($C$1:C2,C2))&"" と入力して下にコピー

       =INDEX(INDIRECT(C2),COUNTIF($C$1:C2,C2)+1)&""   に変更すれば
                                             ^^^^
 教科名の直下への挿入でも対応できます。
 ご参考までに。

(tora) 2020/05/21(木) 09:32


 こんばんは!
ちょっと書いてみました。。。。

 A1から↓みたいなレイアウトがあったとして、、
ダブルクリックで選択したセル以降を右へ進めます。
右クリックで選択したセルを基準に左へ戻します。

 シートは必要分増やして頂いて構いません。
ただ、、最終のシートからはみ出たデータは元に戻せません(仕様です。。(^^;)
それと同じく選択したセルを起点に戻すことによって消えたデータも元に戻せません。(これまた、、仕様です。。あきらめてください(笑))

 3行目と5行目、7行目、9行目、11行目、13行目で反応する様にしています。。。
応用して頂けると助かります。

 まぁ、、なにかの足しにでもして頂けたら幸いです。
ThisWorkbookモジュールに貼り付けます。。。。

 では、、では、、

 _A_______B________C_______D_______E_______F___

 	月曜日	火曜日	水曜日	木曜日	金曜日
1限	国語	国語	国語	国語	国語
	a1	a2	a3	a1	a2
2限	理科	理科	理科	理科	理科
	b1	b2	b3	b4	b5
3限	社会	社会	社会	社会	社会
	c1	c2	c3	c4	c5
4限	道徳	道徳	道徳	道徳	道徳
	d1	d2	d3	d4	d5
5限	体育	体育	体育	体育	体育
	e1	e2	e3	e4	e5
6限	算数	算数	算数	算数	算数
	f1	f2	f3	f4	f5

 Option Explicit
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim MyTbl As Range
Dim ws As Worksheet
Dim r As Range
Dim i As Long
Dim k As Long
Cancel = True
With Sh
    Set MyTbl = .Range("B3").Resize(, 5)
    For i = 5 To 13 Step 2
        Set MyTbl = Union(MyTbl, .Range("B" & i).Resize(, 5))
    Next
End With
If Intersect(MyTbl, Target) Is Nothing Then Exit Sub
ReDim v(0)
For Each ws In Worksheets
    For Each r In ws.Range("B" & Target.Row).Resize(, 5)
        ReDim Preserve v(k)
        v(k) = r.Value
        k = k + 1
    Next
Next
k = 0
For Each ws In Worksheets
    For Each r In ws.Range("B" & Target.Row).Resize(, 5)
        k = k + 1
        r.Value = v(k - 1)
        If ws Is Sh Then
            If r.Address = Target.Address Then
                r.Value = Empty
                k = k - 1
            End If
        End If
    Next
Next
Set MyTbl = Nothing
Erase v
End Sub
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim MyTbl As Range
Dim ws As Worksheet
Dim r As Range
Dim i As Long
Dim k As Long
Cancel = True
With Sh
    Set MyTbl = .Range("B3").Resize(, 5)
    For i = 5 To 13 Step 2
        Set MyTbl = Union(MyTbl, .Range("B" & i).Resize(, 5))
    Next
End With
If Intersect(MyTbl, Target) Is Nothing Then Exit Sub
ReDim v(0)
For Each ws In Worksheets
    For Each r In ws.Range("B" & Target.Row).Resize(, 5)
        ReDim Preserve v(k)
        v(k) = r.Value
        k = k + 1
    Next
Next
k = 0
For Each ws In Worksheets
    For Each r In ws.Range("B" & Target.Row).Resize(, 5)
        k = k + 1
        If k <= UBound(v) + 1 Then
            r.Value = v(k - 1)
            If ws Is Sh Then
                If r.Address = Target.Address Then
                    k = k + 1
                    If k <= UBound(v) + 1 Then
                        r.Value = v(k - 1)
                    End If
                End If
            End If
        Else
            r.Value = Empty
        End If
    Next
Next
Set MyTbl = Nothing
Erase v
End Sub
(SoulMan) 2020/05/21(木) 22:11

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.