2024/02/02

EXCEL 多欄表格橫轉直 cross table to list 交叉表格轉為列表 Unpivot Table 免巨集

雖然EXCEL內建的簡單的資料橫直對調的功能,但是資料的呈現不如人意

另外一種方法是用Unpivot Table功能(翻譯寫逆透視表格,我找不到別的翻譯),有興趣的話可以google看看,不過這樣只是把資料的值轉過去,連動是做不到的

我爬文發現還有最新的函數tocol可以輕鬆做到想要的樣子,但是限定要OFFICE365,OFFICE2021沒有,所以還是想要研究出用函數直接處理的方式。

最後我終於想出來了,不過僅限於固定種類,筆數可以無限增加連動,但如果增加種類要再改過函數。

 

如圖,我想把原本姓名跟成績交錯的表,轉成列表

我使用的方法是這樣,首先要增加一個欄位【編號】做索引

然後因為有四個科目,所以我在新生成的結果要有的第一個數列是1111222233334444

然後姓名的部分很好處理,用VLOOKUP靠編號去找A:B的第二欄就好

科目的部分,則是要找出編號那一列的第3 4 5 6欄,成績也是

所以下一個要生成的就是無限的3456數列 

所以只要去找出編號1的第3欄,第4欄,第5欄,第6欄,接著去找編號2的,就可以靠函數一直往下找了

我另外做了1234數列來方便理解

----

姓名

=VLOOKUP(H2,A:B,2,FALSE)

-----

11223344數列

=INT(ROW(A2)/2)

111222333444數列

=INT(ROW(A3)/3)

1111222233334444數列

=INT(ROW(A4)/4)

 11111222223333344444數列

=INT(ROW(A5)/5

用ROW函數取得當前列號,要重複幾次就除以多少,然後用INT取整數,就會從1開始得到所需的數列,注意第一格要能整除為1,所以要除以5就要用A5這格

-----

1212數列

=MOD(ROW(A2),2)+1

123123數列

=MOD(ROW(A3),3)+1

12341234數列

=MOD(ROW(A4),4)+1

用MOD函數去取 ROW函數的餘數,跟上面的函數一樣,第一格要能整除,就能依據所要的數量取得相對應的數列

-----

34數列 345數列 3456數列

這個直接拿上面的結果再加2就好了 

=MOD(ROW(A2),2)+3

=MOD(ROW(A3),3)+3

=MOD(ROW(A4),4)+3

---

科目

=VLOOKUP("編號",$A$1:$F$1,J2,FALSE) 

=VLOOKUP("編號",$A$1:$F$1,J3,FALSE)

=VLOOKUP("編號",$A$1:$F$1,J4,FALSE)

=VLOOKUP("編號",$A$1:$F$1,J5,FALSE)

簡單來說就是用編號這個值,去找A1:F1的第3~6欄,這邊注意A1:F1要鎖定A$1:F$1

3~6欄我們前面已經產生了3~6樹列了,所以直接去找J2~J5

----

成績 

=VLOOKUP(H2,A:F,J2,FALSE)

=VLOOKUP(H3,A:F,J3,FALSE)

=VLOOKUP(H4,A:F,J4,FALSE)

=VLOOKUP(H5,A:F,J5,FALSE) 

=VLOOKUP(H6,A:F,J6,FALSE)

用H2的編號值1,去找A:F的第3欄,也就是J2

到了H5,一樣用編號值2, 去找A:F的第3欄,也就是J6

----

以上就是我用編號進行索引去將表格轉向的作法

範例檔參考

 

https://docs.google.com/spreadsheets/d/1KC9vDv3-2dm-758venJFc4ylUzAdgPVI/edit?usp=drive_link&ouid=111432457316698416668&rtpof=true&sd=true


 

2024/01/31

EXCEL:利用VBA巨集刪除有錯誤值的列

EXCEL在利用VLOOKUP函數以及引用資料的時候,偶爾會發生找不到資料的情況,

會顯示為#N/A

或是找出來的該列資料有錯誤其實是不需要的,如果要手動排序找出這些值刪掉列當然可以

不過其實有更快的方法,就是直接在VBA裡面執行一段程式碼

例如我要找出A欄所有有錯誤的列並刪除

你可以這麼寫

Sub 刪除A欄有錯誤的列()

Range("A:A").SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete

End Sub

也就是尋找A欄中的特殊儲存格,其值為錯誤的,將該列(entire row)刪除

這樣就可以輕鬆刪掉所有不需要錯誤列了

也可以把中間這行程式碼 放在編寫好的巨集末端,使用上會更方便。

 

另外,如果是貼上資料想要刪除有空值的列

也可以把xlCellTypeFormulas, xlErrors換成xlcelltypeblanks

 

也就是下面這個巨集

Sub 刪除A欄值為空白的列() 

Range("A:A").SpecialCells(xlcelltypeblanks).EntireRow.Delete

End Sub

 


2023/11/15

4EDU 11.0 (原TRBS) 教師端無法遠端遙控 示範轉播 顯示為空白

很久沒用這套系統了

本來一開始都正常

最近發現遙控的時候學生端都是空白畫面,

重開機也都不能解決這個問題

最後發現跟雙螢幕有關,改成單螢幕就好

但是這樣還是沒有解決

後來問客服給我一段影片

基本上就是在空白視窗按右鍵,點第四個選項(實際操作時會被遮住,就是最大化) 

然後就正常了



2023/05/14

如何產生GOOGLE應用程式密碼

原本從GOOGLE的使用者帳戶安全性頁面可以看到應用程式密碼,

或許有安全的考量,現在GOOGLE把這個部分拿掉了,

但是如果知道連結的話,還是可以產生GOOGLE應用程式密碼

 https://security.google.com/settings/security/apppasswords?pli=1

2023/04/24

強迫網路校時指令

如果網域中有一台AD主機可供校時

那就可以用以下的指令寫成一個CMD檔,用管理員身分執行來強迫校時

批次檔內容
net use \\IP 密碼 /user:使用者名稱 --->連線主機
net time \\IP /set /y --->校正時間
net use \\IP /del --->中斷連線

2023/02/10

VIEWFLY班級模型設定 BY EXCEL

話說VIEWFLY的班級模型設定挺麻煩的,

不是簡單的匯出範本改完再匯入就可以

一定要按照正確的操作步驟去操作

弄太多次實在讓人有點煩

所以我選擇直接去修改他系統正在用的班級模型

匯出的檔案是CLM 

但正在用的是XLM

並不完全相同

clm打開總是會有亂碼

開XLM就正常了

預設編碼是UTF-8

照常存檔就可以

首先你要準備好一個調整好大小跟位置,並改好座號的模型 


 然後用這個模型為範本,去新增所有需要的班級

然後因為這樣產生的班級模型名稱是日期+時間,光看檔名無從知道這個檔案到底是哪一班

所以 新增完後,要一一把裡面的其中一個學生名字改成班級名稱,便於等一下檢索

接著要把VIEWFLY關掉

開啟這個資料夾

C:\Program Files (x86)\Howyar\ViewFly Multimedia Interactive System Teacher\DbFile\ClassMode

 


你會看到檔名都是時間

開啟檔案建議用NOTEPAD++,XML標籤會變色,找資料比較快

找到文件的結尾

你會發現出來的順序有點亂,不過影響不大

 <RECORD SequenceNumber="0"> 到 </RECORD> 之間的文字複製貼到EXCEL

然後用資料剖析的功能

把座號的那一欄獨立出來

這邊記得要排序一下,照座號排序


後面我是用VLOOKUP把中間的座號替換掉,再把字串組合回去

只要輸入班級代碼,就可以生成該班的班級模型敘述


接著只要把綠色部分改好的代碼貼回班級模型覆蓋掉再存檔

就可以順利修改班級模型了

 

想要參考檔案的話可以點此下載